docker容器為啥一定要前台運行


docker必須要有個前台程序運行,不然容器會自動退出

 

 使用上面的帶有&后台運行程序就是后台進行,容器中的進程會退出

Docker容器啟動web服務時,都指定了前台運行的參數,例如apache:

  1. ENTRYPOINT [ "/usr/sbin/apache2" ]  

  2. CMD ["-D", "FOREGROUND"]  

 又例如nginx:

 

  1. ENTRYPOINT [ "/usr/sbin/nginx", "-g", "daemon off;" ]  

因為Docker容器僅在它的1號進程(PID為1)運行時,會保持運行。如果1號進程退出了,Docker容器也就退出了。
一定要注意daemon off ;分號不能去掉!否則失敗!!

"daemon off;就是要關閉nginx后台運行

每個docker容器需要一個前台進程一直運行,因為docker容器並不是虛擬機,是利用linux的cgroup和namespace隔離的,在宿主機上本質是個隔離的進程,例如一個容器的主進程是啟動nginx,service nginx start,這句shell充當了主進程,fork了一個子進程啟動了nginx后這個shell就退出了,nginx是shell的子進程,主進程消亡子進程也就停止了,容器也就會一運行就exited了。執行完成service nginx start這個命令也就幾秒鍾,容器就退出了。

docker run :根據鏡像創建一個容器並運行一個命令,操作的對象是 鏡像;

docker exec :在運行的容器中執行命令,操作的對象是 容器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM