我有一个 Dockerfile 来在容器中安装 MySQL 服务器,然后我像这样开始:
sudo docker run -t -i 09d18b9a12be /bin/bash
但是 MySQL 服务不会自动启动,我必须手动运行(从容器内):
service mysql start
如何在运行 docker 容器时自动启动 MySQL 服务?
原文由 mtmacdonald 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个 Dockerfile 来在容器中安装 MySQL 服务器,然后我像这样开始:
sudo docker run -t -i 09d18b9a12be /bin/bash
但是 MySQL 服务不会自动启动,我必须手动运行(从容器内):
service mysql start
如何在运行 docker 容器时自动启动 MySQL 服务?
原文由 mtmacdonald 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答633 阅读✓ 已解决
1 回答577 阅读
2 回答321 阅读✓ 已解决
首先,您的
Dockerfile
有 问题:Docker 镜像不保存正在运行的进程。因此,您的
RUN
命令仅在docker build
阶段执行,并在构建完成后停止。相反,您需要在容器启动时使用CMD
或ENTRYPOINT
命令指定命令,如下所示:其次,docker容器需要一个进程(last command)来保持运行,否则容器会退出/停止。所以在Dockerfile中不能直接使用正常的
service mysql start
命令。解决方案
保持进程运行的典型方法有以下三种:
service
命令并在其后附加非结束命令,如tail -F
当您运行单个服务时,这通常是首选,因为它使 docker 可以访问输出的日志。
这仅适用于
mysqld_safe
类的脚本。start.sh
并将其放在最后如果命令必须执行一系列步骤,这是最好的,同样,
/start.sh
应该保持运行。笔记
对于初学者使用
supervisord
不推荐。老实说,这是矫枉过正。对容器使用单个服务/单个命令要好得多。顺便说一句:请检查 https://registry.hub.docker.com 以获取现有的 mysql docker 映像以供参考