docker必須要有個前台程序運行,不然容器會自動退出
使用上面的帶有&后台運行程序就是后台進行,容器中的進程會退出
Docker容器啟動web服務時,都指定了前台運行的參數,例如apache:
-
ENTRYPOINT [ "/usr/sbin/apache2" ]
-
CMD ["-D", "FOREGROUND"]
又例如nginx:
-
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 :在運行的容器中執行命令,操作的對象是 容器。