1. 程式人生 > >Docker為什麽剛運行就退出了

Docker為什麽剛運行就退出了

docker 退出

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

$ docker run -d ubuntu /bin/bash

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


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

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

這個是docker的機制問題,比如你的web容器,我們以nginx和fpm為例,
正常情況下,我們配置啟動服務只需要啟動響應的service即可,例如

service nginx start && service php5-fpm start

但是,這樣做,nginx和fpm均為後臺進程模式運行,就導致docker前臺沒有運行的應用,
這樣的容器,後臺啟動後,會立即自殺,因為他覺得他沒事可做了.

解決方法:
1.最佳的解決方案是,將你要運行的程序以前臺進程的形式運行,當然,如果你的容器需要同時啟動多個進程,
那麽也只需要,或者說只能將其中一個掛起到前臺即可.
比如上面所說的web容器,我們只需要將啟動指令修改為:

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

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

2.對於有一些你可能不知道怎麽前臺運行的程序,提供一個投機方案,你只需要在你啟動的命令之後,
添加類似於 tail top 這種可以前臺運行的程序,這裏特別推薦 tail ,然後持續輸出你的log文件.
還是以上文的web容器為例,我們還可以寫成:

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

>>>>>END<<<<<<


Docker為什麽剛運行就退出了