為什么docker運行后就自動退出?
docker 容器默認會把容器內部第一個進程,也就是pid=1的程序作為docker容器是否正在運行的依據,
如果docker 容器pid掛了,那么docker容器便會直接退出。
docker run的時候把command做為容器內部命令,如果你使用nginx,那么nginx程序將后台運行,這個時候nginx並不是pid為1的程序,而是執行的bash,這個bash執行了nginx指令后就掛了,所以容器也就退出了。
Docker 容器啟動時,默認會把容器內部第一個進程,也就是pid=1的程序,作為docker容器是否正在運行的依據,如果 docker 容器pid=1的進程掛了,那么docker容器便會直接退出。
Docker未執行自定義的CMD之前,nginx的pid是1,執行到CMD之后,nginx就在后台運行,bash或sh腳本的pid變成了1。
所以一旦執行完自定義CMD,nginx容器也就退出了。
解決方法:
在編寫dockerfile的時候加上 “daemon off;”參數,如下:
FROM ubuntu:16.04 Run apt-get update Run apt-get install -y nginx CMD ["nginx","-g","daemon off;"]
構建容器后使用:
docker run -d ubuntu:16.04 #-d參數讓容器在后台運行
啟動容器后nginx會在后台運行