很開心啊,遇到這個問題,就要講講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 <code>get_pid</code>
<code></code><code><code</code><code>class</code><code>=</code><code>"bash"</code><code>>echo</code><code>"PID of this script: $$"</code>
<code>echo</code><code>"PPID of this script: $PPID"</code>
<code>echo</code><code>"UID of this script: $UID"</code>
<code>#nginx -g 'daemon off;'</code></code>
此時我們啟動容器去執行這個sh檔案
<code><code>odtoy:~ zhaojunlike$ eval `docker-machine env</code><code>default</code><code>`</code>
<code>godtoy:~ zhaojunlike$ cd WorkSpace/</code>
<code>godtoy:WorkSpace zhaojunlike$ ls</code>
<code>docker nodejs php pid_get</code>
<code>godtoy:WorkSpace zhaojunlike$ vim pid_get</code>
<code>godtoy:WorkSpace zhaojunlike$ docker run -v `pwd`/pid_get:/pid_get:ro --rm --workdir=/ nginx bash /pid_get</code>
<code>PID of</code><code>this</code> <code>script: 1</code>
<code>PPID of</code><code>this</code> <code>script: 0</code>
<code>UID of</code><code>this</code> <code>script: 0</code>
<code>godtoy:WorkSpace zhaojunlike$ </code></code>
在容器執行完pid_get 後,容器也就自動退出了,這個時候,列印出了目前的bash運作的pid是1。
是以,如果我們想讓容器不挂掉,那麼非守護進行的執行是必須得,當然下面也能去讓一個容器内部,執行
<code><code>godtoy:WorkSpace zhaojunlike$ docker run -it nginx bash</code>
<code>root@a8baa5fe77f0:/# nginx</code>
<code>root@a8baa5fe77f0:/# godtoy:WorkSpace zhaojunlike$ </code></code>
我們使用-it參數可以連接配接到容器内部的管道,然後我們在容器内部使用nginx指令。最後<code>Ctrl+P+Q</code>退出容器後,容器依然運作。
總結
如果樓主是需要去在docker中使用node,那麼就沒必要去安裝pm2等工具了,直接node,如果你怕你的容器會挂掉,可以加上restart等相關參數比如<code>`</code>docker run .... --restart=always
<a href="https://s2.51cto.com/oss/201711/06/cf33bbf8c83ceebca562100bda9fef74.png" target="_blank"></a>
以上緊緊是個人總結,如果有不對的地方,歡迎網友糾正。
本文轉自 Mr_sheng 51CTO部落格,原文連結:
http://blog.51cto.com/sf1314/1979312