前面我們分析了攜程的 apollo(見 詳解apollo的設計與使用),現在再來看看阿裡的 nacos。和 apollo 一樣,nacos 也是一款配置中心,同樣可以實現配置的集中管理、分環境管理、即時生效等等。不過,nacos 還具備了服務發現的功能。這篇博客將重點分析 nacos 和 apoll... ...
疑問說明
今天使用鏡像啟動容器
運行命令
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