摘要:問題容器跑著為啥會掛掉容器默認會把容器內部第一個進程,也就是的程序作為容器是否正在運行的依據,如果容器掛了,那么容器便會直接退出。最后退出容器后,容器依然運行。
問題很開心啊,遇到這個問題,就要講講docker容器的進程原理了,基本上了解過docker的人都清楚docker的幾個隔離方式,那么進程同樣是進行隔離。
1.docker容器跑著為啥會掛掉?
docker 容器默認會把容器內部第一個進程,也就是pid=1的程序作為docker容器是否正在運行的依據,如果docker 容器pid掛了,那么docker容器便會直接退出。
2.docker run的時候把command最為容器內部命令,如果你使用nginx,那么nginx程序將后臺運行,這個時候nginx并不是pid為1的程序,而是執行的bash,這個bash執行了nginx指令后就掛了,所以容器也就退出了,和你這個一樣的道理,pm2 start 過后,bash 的pid為1,那么此時bash執行完以后會退出,所以容器也就退出了。
下面我使用實例告訴why we do this!!touch file get_pid
echo "PID of this script: $$" echo "PPID of this script: $PPID" echo "UID of this script: $UID" #nginx -g "daemon off;"
此時我們啟動容器去執行這個sh文件
odtoy:~ zhaojunlike$ eval `docker-machine env default` godtoy:~ zhaojunlike$ cd WorkSpace/ godtoy:WorkSpace zhaojunlike$ ls docker nodejs php pid_get godtoy:WorkSpace zhaojunlike$ vim pid_get godtoy:WorkSpace zhaojunlike$ docker run -v `pwd`/pid_get:/pid_get:ro --rm --workdir=/ nginx bash /pid_get PID of this script: 1 PPID of this script: 0 UID of this script: 0 godtoy:WorkSpace zhaojunlike$
在容器執行完pid_get 后,容器也就自動退出了,這個時候,打印出了當前的bash運行的pid是1。
所以,如果我們想讓容器不掛掉,那么非守護進行的執行是必須得,當然下面也能去讓一個容器內部,執行
godtoy:WorkSpace zhaojunlike$ docker run -it nginx bash root@a8baa5fe77f0:/# nginx root@a8baa5fe77f0:/# godtoy:WorkSpace zhaojunlike$
我們使用-it參數可以連接到容器內部的管道,然后我們在容器內部使用nginx命令。最后Ctrl+P+Q退出容器后,容器依然運行。
總結如果樓主是需要去在docker中使用node,那么就沒必要去安裝pm2等工具了,直接node,如果你怕你的容器會掛掉,可以加上restart等相關參數比如`docker run .... --restart=always
以上緊緊是個人總結,如果有不對的地方,歡迎網友糾正。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26922.html
摘要:前兩個數據業務相關的服務即下圖的,第三個項目就是的實現的負載均衡。這里后臺,前臺項目各啟動了三個實例,用戶訪問的時候,就會根據配置的負載均衡的策略,訪問其中一個。這一部分與之前我轉發的實現服務發現及網關其實也只是差了個網關和負載均衡。 一.簡介 上一篇只講了博客的前端問題,這一篇講一下后端的微服務搭建。項目的后端使用的thinkjs框架,在我之前的博客中已經寫過,這里就不重點說明了。后...
摘要:為了證明模板,我們可以使用環境變量配置讓這個變成一個更通用的代理服務器。我們將定義環境變量作為一個站點的代理。當這個容器使用這個環境變量啟動,將使用它來生成一個的路徑。 一種 Dockerize 應用的簡單方式 標簽(空格分隔): Docker dockerize 作者是 jasonwilder。原文地址是 A Simple Way to Dockerize Applica...
摘要:目前只能重新啟動一個容器停止上面的容器可以比較一下與中命令的變化但此時服務是停止的,并沒有在后臺運行,訪問無效。 只看標題還不是很明顯,本文實現docker的這樣一種比較常用的功能:通過docker run啟動一個容器后,容器中已經運行了一個后臺進程(這里以監聽80端口的nginx為例),同時進入一個shell終端可供操作,而不受限于只能在前臺運行nginx與運行shell終端之間的一...
閱讀 689·2021-11-23 09:51
閱讀 3280·2019-08-30 15:54
閱讀 444·2019-08-30 15:52
閱讀 3114·2019-08-30 13:58
閱讀 2919·2019-08-30 13:53
閱讀 2688·2019-08-29 14:18
閱讀 2416·2019-08-27 10:54
閱讀 2370·2019-08-26 18:09