2015-12-01 193 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