首頁  >  文章  >  運維  >  docker運行nginx使用daemon off的原因是什麼

docker運行nginx使用daemon off的原因是什麼

PHPz
PHPz轉載
2023-06-02 19:32:133602瀏覽

問題

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中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除