您好,登錄后才能下訂單哦!
使用docker run啟動鏡像出現(xiàn)自動退出如何解決?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
執(zhí)行命令:docker run --name centos8 -d centos /bin/bash,通過docker ps查看正在運(yùn)行中容器,找不到centos8。
通過docker ps -a查看發(fā)現(xiàn),centos8容器已經(jīng)處于停止?fàn)顟B(tài)了
[root@MiWiFi-R4A-srv server]$ docker run --name centos8 -d centos /bin/bash a770630ca865b3c3346a321a383f302ed22af9281be8482f4f4debc59218d0d1 [root@MiWiFi-R4A-srv server]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@MiWiFi-R4A-srv server]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a770630ca865 centos "/bin/bash" 37 seconds ago Exited (0) 35 seconds ago centos8
為什么退出?
這是因為docker后臺運(yùn)行,必須有一個前臺進(jìn)程。docker運(yùn)行的命令如果不是那些一直掛起的命令(e.g. top,ping),就是會自動退出的。而上面的代碼中-d centos就是需要執(zhí)行的指定的命令。命令如果執(zhí)行完畢了或者應(yīng)用終結(jié)時,容器會自動停止。
解決方法
以前臺進(jìn)程的形式運(yùn)行
將運(yùn)行的程序以前臺進(jìn)程的形式運(yùn)行,如果容器需要同時啟動多個進(jìn)程,那么也只需要將其中一個掛起到前臺即可。
比如上面所說的 centos 容器,只需要將啟動指令修改為交互方式啟動:
docker run --name centos8 -it centos /bin/bash
又或者是Web容器:
service php5-fpm start && nginx -g "daemon off;"
取巧方式
添加類似于 tail top 這種可以前臺運(yùn)行的程序,持續(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
自己寫腳本
在啟動centos/ubuntu容器時,可以做一個手腳:做一個死循環(huán),持續(xù)輸出任意,這樣容器不會認(rèn)為沒事可做而自殺了。
docker run -d centos /bin/bash -c "while true; do echo hello world; sleep 1; done"
補(bǔ)充知識:docker中啟動容器時CMD調(diào)用的sh腳本中if命令報未預(yù)期的符號 if[[的解決辦法
最近通過Dockerfile編寫鏡像,CMD中調(diào)用的是sh腳本(start.sh)進(jìn)行啟動容器,通過docker run啟動時,啟動不成功,進(jìn)行docker logs 容器ID,發(fā)現(xiàn)報錯為:未預(yù)期的符號 if [[
我直接在外部linux系統(tǒng)調(diào)用執(zhí)行start.sh是成功的,通過docker exec 進(jìn)入容器,在容中調(diào)用start.sh也未報錯,命令中需要啟動的程序都成功啟動。腳本直接執(zhí)行沒問題,通過docker run卻報錯,百思不得其解。
start.sh中報錯代碼段如下
if [[ -e /home/dc/testnn-aaa.zip ]];then rm -rf /home/testnn-aaa unzip -q -o -d /home testnn-aaa.zip echo "unzip zip finished" else echo "dc zip not exist" fi
經(jīng)過查閱比較,因為我的start.sh在報錯語句之前也有if語句,但是沒報錯,發(fā)現(xiàn)兩處區(qū)別為第一處if使用的是單[],將代碼改為[],則成功,修改如下:
if [ -e /home/dc/testnn-aaa.zip ];then
關(guān)于使用docker run啟動鏡像出現(xiàn)自動退出如何解決問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。