天天看點

docker運作nginx為什麼要使用 daemon off

很開心啊,遇到這個問題,就要講講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>&lt;code</code><code>class</code><code>=</code><code>"bash"</code><code>&gt;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;'&lt;/code&gt;</code>

此時我們啟動容器去執行這個sh檔案

<code>&lt;code&gt;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$ &lt;/code&gt;</code>

在容器執行完pid_get 後,容器也就自動退出了,這個時候,列印出了目前的bash運作的pid是1。

是以,如果我們想讓容器不挂掉,那麼非守護進行的執行是必須得,當然下面也能去讓一個容器内部,執行

<code>&lt;code&gt;godtoy:WorkSpace zhaojunlike$ docker run -it nginx bash</code>

<code>root@a8baa5fe77f0:/# nginx</code>

<code>root@a8baa5fe77f0:/# godtoy:WorkSpace zhaojunlike$ &lt;/code&gt;</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

繼續閱讀