运行Docker容器时如何自动启动服务?
我有一个Dockerfile将MySQL服务器安装在一个容器中,然后我开始像这样:
sudo docker run -t -i 09d18b9a12be /bin/bash
但是MySQL服务不会自动启动,我必须手动运行(从容器内部):
service mysql start
运行docker容器时如何自动启动MySQL服务?
回答:
首先,有一个 在您的Dockerfile
:
RUN service mysql restart && /tmp/setup.sh
Docker映像不会保存正在运行的进程。因此,您的RUN
命令仅在docker
build阶段执行,并在构建完成后停止。相反,您需要使用CMD
或ENTRYPOINT
如下所示的命令在启动容器时指定命令:
CMD mysql start
其次,docker容器需要一个进程(最后一个命令)来保持运行,否则该容器将退出/停止。因此,普通service mysql
start命令不能直接在Dockerfile中使用。
回答:
保持进程运行的典型方法有三种:
- 使用
service
命令并在其后附加非结束命令tail -F
CMD service mysql start && tail -F /var/log/mysql/error.log
当您运行单个服务时,这通常是首选的,因为这会使输出的日志可供docker访问。
- 或使用前台命令执行此操作
CMD /usr/bin/mysqld_safe
仅当存在类似的脚本时,此方法才有效mysqld_safe
。
- 或将您的脚本打包
start.sh
并放在最后CMD /start.sh
如果命令必须执行一系列步骤(最好再次/start.sh
保持运行状态),则最好。
回答:
对于初学者supervisord
,不建议使用。老实说,这太过分了。最好对容器使用单个服务/单个命令。
顺便说一句:请检查https://registry.hub.docker.com以获取现有的mysql
docker镜像以供参考
以上是 运行Docker容器时如何自动启动服务? 的全部内容, 来源链接: utcz.com/qa/435847.html