Docker爲何剛運行就退出了

引言

最近羣裏的好多新接觸Docker的朋友,好多都遇到了相同的問題,使用php

$ docker run -d ubuntu /bin/bash

運行了一個簡單的容器後,而後docker ps -a 進行查看, 會發現容器已經退出了。nginx

其實呢,這個問題並不複雜,瞭解了下面的內容,我想,你就知道該如何處理了.web

根源

很重要的要說明的一點: Docker容器後臺運行,就必須有一個前臺進程.
容器運行的命令若是不是那些一直掛起的命令(好比運行top,tail),就是會自動退出的

這個是 docker 的機制問題,好比你的 web 容器,咱們以 nginx 和 fpm 爲例,
正常狀況下,咱們配置啓動服務只須要啓動響應的 service 便可,例如
docker

service nginx start && service php5-fpm start

可是,這樣作, nginx 和 fpm 均爲後臺進程模式運行,就致使 docker 前臺沒有運行的應用,
這樣的容器,後臺啓動後,會當即自殺,由於他以爲他沒事可作了.ubuntu

解決方法

1. 最佳的解決方案是,將你要運行的程序之前臺進程的形式運行,固然,若是你的容器須要同時啓動多個進程,
那麼也只須要,或者說只能將其中一個掛起到前臺便可.
好比上面所說的 web 容器,咱們只須要將啓動指令修改成:bash

service php5-fpm start && nginx -g "daemon off;"

這樣,fpm會在容器中之後臺進程的方式運行,而nginx則掛起進程至前臺運行,這樣,就能夠保持容器不會認爲沒事可作而自殺了.spa

2. 對於有一些你可能不知道怎麼前臺運行的程序,提供一個投機方案,你只須要在你啓動的命令以後,添加相似於 tail top 這種能夠前臺運行的程序,這裏特別推薦 tail ,而後持續輸出你的log文件.
仍是以上文的web容器爲例,咱們還能夠寫成:.net

service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log

>>>>>END<<<<<<code

博客搬運地址

相關文章
相關標籤/搜索