問題
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運行nginx使用daemon off實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!