疑問說明
今天使用鏡像啟動容器
運行命令
docker run --name tmpcentos -d centos
通過docker ps查看正在運行中容器 ,發現在運行中的容器中無法找到缺找不到tmpcentos容器
當通過docker ps -a查看發現
tmpcentos容器已經處于停止狀態了,那么為什么出現這種現象呢?
出現這種現象的原因:
docker容器運行必須有一個前臺行程, 如果沒有前臺行程執行,容器認為空閑,容器運行的命令如果不是那些一直掛起的命令(eg. 運行top,tail等),就會自行退出
容器運行的命令如果不是那些一直掛起的命令( 運行top,tail、回圈等),就是會自動退出
這個是 docker 的機制問題,
如我們的 web 容器,以 nginx 和 fpm 為例,正常情況下,
啟動服務只需啟動相應的 service 即可,
如:service nginx start && service php5-fpm start,但是,這樣做, nginx 和 fpm 均以后臺行程模式運行
就會導致 docker 前臺沒有正在運行的應用,so,容器會立即自殺,因為他覺得沒事可做了,
方案1
開起一個死回圈行程,讓他不停的回圈下去,前臺永遠有行程執行,那么容器就不會退出了,以centos為例
docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"
方案2
在腳本最后一行添加tail -f /dev/null,這個命令永遠完成不了,所以該腳本一直不會執行完,所以該容器永遠不會退出
就是起一個死回圈行程,讓他不停的回圈下去,前臺永遠有行程執行,那么容器就不會退出了
docker run -d --name ubuntu ubuntu /bin/bash -c "tail -f /dev/null"
參照資料:
http://www.java265.com/docker/202206/3648.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/486301.html
標籤:Java
下一篇:Linux版本的專案環境搭建
