Docker啟動(dòng)鏡像就自動(dòng)退出問題及解決
Docker啟動(dòng)鏡像就自動(dòng)退出問題
一、問題引入
根據(jù)鏡像啟動(dòng)容器,執(zhí)行命令如下:docker run --name mycentos -d centos,通過docker ps查看正在運(yùn)行中容器,缺找不到mycentos容器。
再次通過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ī)制問題,比如我們的 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)沒有正在運(yùn)行的應(yīng)用,
so,容器會(huì)立即自殺,因?yàn)樗X得沒事可做了。
三、解決方案
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)即可。
比如上面所說的 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
再以上面所說的 web 容器為例,可以寫成:
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)為沒事可做而自殺了。
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)閉的問題
問題復(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下利用jenkins和docker實(shí)現(xiàn)持續(xù)交付
這篇文章主要介紹了利用jenkins和docker實(shí)現(xiàn)持續(xù)交付功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
docker 設(shè)置windows存儲(chǔ)路徑的操作
這篇文章主要介紹了docker 設(shè)置windows存儲(chǔ)路徑的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
詳解利用nginx和docker實(shí)現(xiàn)一個(gè)簡(jiǎn)易的負(fù)載均衡
本篇文章主要介紹了利用nginx和docker實(shí)現(xiàn)一個(gè)簡(jiǎn)易的負(fù)載均衡 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Docker快速部署主流腳本語言JavaScript的全過程
JavaScript是目前所有主流瀏覽器上唯一支持的腳本語言,這也是早期JavaScript的唯一用途,下面這篇文章主要給大家介紹了關(guān)于Docker快速部署主流腳本語言JavaScript的相關(guān)資料,需要的朋友可以參考下2023-02-02
淺談Docker-compose中的depends_on順序的問題解決
本文主要介紹了淺談Docker-compose中的depends_on順序的問題解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Windows Docker端口占用錯(cuò)誤及解決方案總結(jié)
在 Windows 環(huán)境下使用 Docker 容器時(shí),端口占用錯(cuò)誤是開發(fā)和運(yùn)維中常見且棘手的問題,本文將深入剖析該問題的成因,介紹如何通過查看端口分配,合理調(diào)整動(dòng)態(tài)端口范圍,以及重啟網(wǎng)絡(luò)服務(wù)等實(shí)用技巧,有效解決 Windows Docker 端口占用錯(cuò)誤,需要的朋友可以參考下2025-04-04
親手教你Docker Compose安裝DOClever的詳細(xì)過程
DOClever是一個(gè)可視化免費(fèi)開源的接口管理工具,DOClever前后端全部采用了javascript來作為我們的開發(fā)語言。這篇文章主要介紹了Docker Compose安裝DOClever的詳細(xì)過程,需要的朋友可以參考下2021-09-09

