針對Docker運行啓動就退出問題一站式解決方案

原文鏈接:https://blog.csdn.net/u010358168/article/details/81347927

 

 

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/u010358168/article/details/81347927

 

 

一、問題引入

根據鏡像啓動容器,執行命令如下:docker run --name mycentos -d centos,通過docker ps查看正在運行中容器,缺找不到mycentos容器。再次通過docker ps -a查看發現,mycentos容器已經處於停止狀態了。

二、原因

  • Docker容器後臺運行,就必須有一個前臺進程.
  • 容器運行的命令如果不是那些一直掛起的命令(eg. 運行toptail等),就是會自動退出
  • 這個是 docker 的機制問題,比如我們的 web 容器,以 nginx 和 fpm 爲例, 
    正常情況下,啓動服務只需啓動相應的 service 即可,例如:service nginx start && service php5-fpm start,但是,這樣做, nginx 和 fpm 均以後臺進程模式運行,就會導致 docker 前臺沒有正在運行的應用,so,容器會立即自殺,因爲他覺得沒事可做了。

三、解決方案

3.1 將要運行的程序以前臺進程的形式運行

將要運行的程序以前臺進程的形式運行,如果容器需要同時啓動多個進程,那麼也只需要將其中一個掛起到前臺即可。 
比如上面所說的 web 容器,只需要將啓動指令修改爲:

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

3.2 投機方案

對於可能不知道怎麼前臺運行的程序,提供一個投機方案,只需要在啓動的命令之後,添加類似於 tail top 這種可以前臺運行的程序,這裏推薦tail ,然後持續輸出log文件即可。

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

再以上面所說的 web 容器爲例,可以寫成:

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

3.3 以centos/ubuntu爲例

3.1,在啓動centos/ubuntu容器時,可以做一個手腳:做一個死循環,持續輸出任意,這樣容器不會認爲沒事可做而自殺了

docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"
  • 1

好了,該問題就簡單介紹到這了,如果還沒有解決問題或者有更好的解決方案,歡迎留言哈~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章