运行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阶段执行,并在构建完成后停止。相反,您需要使用CMDENTRYPOINT如下所示的命令在启动容器时指定命令:

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

回到顶部