Docker啟動鏡像就自動退出問題及解決
Docker啟動鏡像就自動退出問題
一、問題引入
根據(jù)鏡像啟動容器,執(zhí)行命令如下:docker run --name mycentos -d centos,通過docker ps查看正在運行中容器,缺找不到mycentos容器。
再次通過docker ps -a查看發(fā)現(xiàn),mycentos容器已經(jīng)處于停止?fàn)顟B(tài)了。
二、原因
Docker容器后臺運行,就必須有一個前臺進程.
容器運行的命令如果不是那些一直掛起的命令(eg. 運行top,tail等),就是會自動退出
這個是 docker 的機制問題,比如我們的 web 容器,以 nginx 和 fpm 為例,
正常情況下,啟動服務(wù)只需啟動相應(yīng)的 service 即可,例如:service nginx start && service php5-fpm start,但是,這樣做, nginx 和 fpm 均以后臺進程模式運行,就會導(dǎo)致 docker 前臺沒有正在運行的應(yīng)用,
so,容器會立即自殺,因為他覺得沒事可做了。
三、解決方案
3.1 將要運行的程序以前臺進程的形式運行
將要運行的程序以前臺進程的形式運行,如果容器需要同時啟動多個進程,那么也只需要將其中一個掛起到前臺即可。
比如上面所說的 web 容器,只需要將啟動指令修改為:
service php5-fpm start && nginx -g "daemon off;"
3.2 投機方案
對于可能不知道怎么前臺運行的程序,提供一個投機方案,只需要在啟動的命令之后,添加類似于 tail top 這種可以前臺運行的程序,這里推薦tail ,然后持續(xù)輸出log文件即可。
service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log
再以上面所說的 web 容器為例,可以寫成:
service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log
3.3 以centos/ubuntu為例
同3.1,在啟動centos/ubuntu容器時,可以做一個手腳:做一個死循環(huán),持續(xù)輸出任意,這樣容器不會認為沒事可做而自殺了。
docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"
3.4 docker run 直接進入容器內(nèi)
docker ?run ?-it ?image_id ?/bin/bash 或 docker ?run ?-it ?image_id ?/bin/sh
記錄docker啟動鏡像自動關(guān)閉的問題
問題復(fù)現(xiàn)
今天裝dockerui-portainer圖形化時,安裝完鏡像,啟動之后總是自動退出。
解決辦法(我是直接用的第二種)
在啟動腳本里面增加一個執(zhí)行進程:
tail -f /dev/null
如果是別人的鏡像你不想修改,可以用-dit參數(shù)
docker run -dit --name ubuntu2 ubuntu
或
docker run -d --name ubuntu ubuntu /bin/bash -c "tail -f /dev/null"
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker啟動logstash失敗的問題及解決(可能原因)
這篇文章主要介紹了docker啟動logstash失敗的問題及解決(可能原因),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08docker部署管理工具portainer-ce的實現(xiàn)
Portainer是一個可視化的容器鏡像的圖形管理工具,利用Portainer可以輕松構(gòu)建,管理和維護Docker環(huán)境,本文主要介紹了docker部署管理工具portainer-ce的實現(xiàn),感興趣的可以了解一下2023-08-08PVE下擴展openwrt?for?x86分區(qū)大小方式
本文介紹了在PVE環(huán)境下如何對OpenWRT虛擬機的分區(qū)進行擴容,包括磁盤調(diào)整、軟件安裝、分區(qū)配置和系統(tǒng)引導(dǎo)等步驟,操作前需做好備份,以防數(shù)據(jù)丟失2024-10-10