nginx docker官方鏡像添加自定義啟動命令自動退出
? 今天在啟動nginx官方鏡像的時候想在啟動后執行一些CMD命令,但發現每次執行完CMD命令后鏡像會自動退出,在網上查找后發現:
? If you add a custom CMD in the Dockerfile, be sure to include
-g daemon off;in the CMD in order for nginx to stay in the foreground, so that Docker can track the process properly (otherwise your container will stop immediately after starting)!
譯文:
? 如果你再Dockerfile中添加了一條自定義的CMD命令,為了使nginx保持在前臺運行請確定CMD命令中包含引數 -g daemon off; ,這樣Docker才能正確的跟蹤行程(否則你的容器回在啟動后立即停止)
? 再從docker的運行機制來說明:
? docker判斷容器是否運行的依據是容器內pid(行程號)為1的行程是否結束,一旦pid=1的行程結束后容器也會隨之退出,
? 在未添加自定義的CMD命令時,nginx容器中pid=1的行程是nginx,而添加了CMD命令后,這條自定義的CMD命令的pid變成了1,而nginx行程轉為守護執行緒的方式來執行,當自定義的CMD命令執行結束后,容器便會隨之退出!
解決方法 : 添加全域引數 -g ‘daemon off’;
解釋:設定nginx不以守護執行緒的方式運行,這樣nginx始終保持行程號pid=1,這樣容器就會隨著nginx一直運行下去,
示例:
-
dockerfile
FROM nginx:latest CMD echo "hello" && exec nginx -g 'daemon off;' -
命令列
docker run -itd nginx:latest /bin/bash echo "hello" && exec nginx -g 'daemon of f;'純屬個人理解,若有不足還請指正!
參考博客:
Docker啟動Nginx容器有entrypoint或command
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/301002.html
標籤:其他
下一篇:Linux命令指令
