【发布时间】:2015-12-01 20:59:07
【问题描述】:
我用以下几行结束我的 Debian Dockerfile:
EXPOSE 80 22
COPY etc/supervisor/conf.d /etc/supervisor/conf.d
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
在/etc/supervisor/conf.d/start.conf 文件中:
[program:ssh]
command=/usr/sbin/service ssh restart
[program:nginx]
command=/usr/sbin/nginx -g 'daemon off;'
[program:systemctl]
command=/bin/systemctl daemon-reload
[program:systemctl]
command=/bin/systemctl start php7-fpm.service
如果我尝试使用以下命令运行此 Docker 映像:
$ docker run -d -p 8080:80 -p 8081:22 lanti/debian
它立即停止运行。如果我尝试在前台运行它:
$ docker run -it -v /home/core/share:/root/share -p 8080:80 -p 8081:22 lanti/debian
同样,直接退出。如果我使用 bash CMD 运行:
$ docker run --rm -it -v /home/core/share:/root/share -p 8080:80 -p 8081:22 lanti/debian bash
它在控制台中保持活动状态,但是supervisor预定义的命令没有运行,所以我需要在容器内运行$ service supervisor restart,否则Nginx和SSH将无法启动。
如何启动一个在启动时运行多个命令的 docker 容器?过去我在主机操作系统下的 systemd 文件中使用ExecStartPost 行,但正因为如此,systemd 文件变得复杂,所以我尝试将预启动命令移动到容器中,以便在任何类型的启动时自动运行.
这个docker容器以后会有nginx、php、ssh、phpmyadmin和mysql。我不想要多个容器。
感谢您的帮助!
【问题讨论】:
标签: docker supervisord systemd