我有一个Dockerfile将MySQL服务器安装在一个容器中,然后我开始像这样:
sudo docker run -t -i 09d18b9a12be /bin/bash
但是MySQL服务不会自动启动,我必须手动运行(从容器内部):
service mysql start
运行docker容器时如何自动启动MySQL服务?
首先,有一个 问题, 在您的Dockerfile:
Dockerfile
RUN service mysql restart && /tmp/setup.sh
Docker映像不会保存正在运行的进程。因此,您的RUN命令仅在docker build阶段执行,并在构建完成后停止。相反,您需要使用CMD或ENTRYPOINT如下所示的命令在启动容器时指定命令:
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。
mysqld_safe
start.sh
CMD /start.sh
如果命令必须执行一系列步骤(最好再次/start.sh保持运行状态),则最好。
/start.sh
对于初学者supervisord,不建议使用。老实说,这太过分了。最好对容器使用单个服务/单个命令。
supervisord
顺便说一句:请检查https://registry.hub.docker.com以获取现有的mysql docker镜像以供参考