2015-12-01 173 views
1

我结束我的Debian Dockerfile这些行:保活Docker容器与supervisord

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 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 

它保持活跃在控制台,而是由上级的预定义的命令无法运行,所以我需要运行$ service supervisor restart容器内,否则的Nginx和SSH将不会启动。

我如何开始与多个命令泊坞窗容器在启动时运行?在过去,我在主机操作系统下的systemd文件中使用了ExecStartPost行,但是由于这种原因,systemd文件变得复杂,所以我尝试将预启动命令移动到容器中,以便在任何类型的启动时自动运行。

这搬运工容器将有nginx的,PHP,SSH,在未来的phpmyadmin和mysql。我不想要多个容器。

谢谢你的帮助!

回答

2

让我们说在泊坞窗容器中运行的厨房水槽是不是最佳做法前言本。 Docker不是一台虚拟机。

这就是说,几个问题。

  • 就像监督者控制的过程一样,监督者本身也不应该守护进程。添加-n

  • 我不完全知道为什么你期望的,需要的,或者希望有systemd和监督者运行。大多数码头集装箱没有可用的init系统。为什么不只是一切的用户主管?除非docker在最后几个版本中发生了重大变化,否则容器内的systemd将不会像您认为的那样工作。

+1

使用多克尔典型的方法是每容器1点的过程。你可以用docker-compose @lanti轻松做到这一点 – Fuxi

+0

我明白了。所以我可以连接让我们说一个PHP + Nginx容器与MySQL容器?将nginx + php保存在同一个容器中是一个好主意吗?我从主管那里删除了systemd。我跟着一个不是码头工的教程。现在主管也启动php-fpm。 – Lanti