Docker啟動(dòng)鏡像就自動(dòng)退出問(wèn)題及解決
Docker啟動(dòng)鏡像就自動(dòng)退出問(wèn)題
一、問(wèn)題引入
根據(jù)鏡像啟動(dòng)容器,執(zhí)行命令如下:docker run --name mycentos -d centos,通過(guò)docker ps查看正在運(yùn)行中容器,缺找不到mycentos容器。
再次通過(guò)docker ps -a查看發(fā)現(xiàn),mycentos容器已經(jīng)處于停止?fàn)顟B(tài)了。
二、原因
Docker容器后臺(tái)運(yùn)行,就必須有一個(gè)前臺(tái)進(jìn)程.
容器運(yùn)行的命令如果不是那些一直掛起的命令(eg. 運(yùn)行top,tail等),就是會(huì)自動(dòng)退出
這個(gè)是 docker 的機(jī)制問(wèn)題,比如我們的 web 容器,以 nginx 和 fpm 為例,
正常情況下,啟動(dòng)服務(wù)只需啟動(dòng)相應(yīng)的 service 即可,例如:service nginx start && service php5-fpm start,但是,這樣做, nginx 和 fpm 均以后臺(tái)進(jìn)程模式運(yùn)行,就會(huì)導(dǎo)致 docker 前臺(tái)沒(méi)有正在運(yùn)行的應(yīng)用,
so,容器會(huì)立即自殺,因?yàn)樗X(jué)得沒(méi)事可做了。
三、解決方案
3.1 將要運(yùn)行的程序以前臺(tái)進(jìn)程的形式運(yùn)行
將要運(yùn)行的程序以前臺(tái)進(jìn)程的形式運(yùn)行,如果容器需要同時(shí)啟動(dòng)多個(gè)進(jìn)程,那么也只需要將其中一個(gè)掛起到前臺(tái)即可。
比如上面所說(shuō)的 web 容器,只需要將啟動(dòng)指令修改為:
service php5-fpm start && nginx -g "daemon off;"
3.2 投機(jī)方案
對(duì)于可能不知道怎么前臺(tái)運(yùn)行的程序,提供一個(gè)投機(jī)方案,只需要在啟動(dòng)的命令之后,添加類似于 tail top 這種可以前臺(tái)運(yùn)行的程序,這里推薦tail ,然后持續(xù)輸出log文件即可。
service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log
再以上面所說(shuō)的 web 容器為例,可以寫(xiě)成:
service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log
3.3 以centos/ubuntu為例
同3.1,在啟動(dòng)centos/ubuntu容器時(shí),可以做一個(gè)手腳:做一個(gè)死循環(huán),持續(xù)輸出任意,這樣容器不會(huì)認(rèn)為沒(méi)事可做而自殺了。
docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"
3.4 docker run 直接進(jìn)入容器內(nèi)
docker ?run ?-it ?image_id ?/bin/bash 或 docker ?run ?-it ?image_id ?/bin/sh
記錄docker啟動(dòng)鏡像自動(dòng)關(guān)閉的問(wèn)題
問(wèn)題復(fù)現(xiàn)
今天裝dockerui-portainer圖形化時(shí),安裝完鏡像,啟動(dòng)之后總是自動(dòng)退出。
解決辦法(我是直接用的第二種)
在啟動(dòng)腳本里面增加一個(gè)執(zhí)行進(jìn)程:
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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker及Docker-Compose的實(shí)例用法
在本篇文章里小編給大家整理的是關(guān)于Docker及Docker-Compose的實(shí)例用法,需要的朋友們可以學(xué)習(xí)參考下。2020-02-02docker啟動(dòng)logstash失敗的問(wèn)題及解決(可能原因)
這篇文章主要介紹了docker啟動(dòng)logstash失敗的問(wèn)題及解決(可能原因),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Docker 中的 bootfs、rootfs 簡(jiǎn)介
Docker中的bootfs和rootfs是容器文件系統(tǒng)的兩個(gè)層次,bootfs負(fù)責(zé)內(nèi)核啟動(dòng),而rootfs提供運(yùn)行環(huán)境,容器共享宿主機(jī)內(nèi)核,因此沒(méi)有獨(dú)立的bootfs,只使用精簡(jiǎn)的rootfs,感興趣的朋友跟隨小編一起看看吧2024-12-12docker部署管理工具portainer-ce的實(shí)現(xiàn)
Portainer是一個(gè)可視化的容器鏡像的圖形管理工具,利用Portainer可以輕松構(gòu)建,管理和維護(hù)Docker環(huán)境,本文主要介紹了docker部署管理工具portainer-ce的實(shí)現(xiàn),感興趣的可以了解一下2023-08-08一次docker錯(cuò)誤的耗時(shí)排查過(guò)程記錄
這篇文章主要給大家介紹了一次docker錯(cuò)誤的耗時(shí)排查過(guò)程記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11PVE下擴(kuò)展openwrt?for?x86分區(qū)大小方式
本文介紹了在PVE環(huán)境下如何對(duì)OpenWRT虛擬機(jī)的分區(qū)進(jìn)行擴(kuò)容,包括磁盤(pán)調(diào)整、軟件安裝、分區(qū)配置和系統(tǒng)引導(dǎo)等步驟,操作前需做好備份,以防數(shù)據(jù)丟失2024-10-103分鐘帶你學(xué)會(huì)docker搭建帕魯服務(wù)器
幻獸帕魯已經(jīng)正式開(kāi)服,目前在線人數(shù)已經(jīng)超過(guò)7W+,很多玩家想自己創(chuàng)建服務(wù)器和朋友一起聯(lián)機(jī)游玩,本文主要介紹了3分鐘帶你學(xué)會(huì)docker搭建帕魯服務(wù)器,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01