Docker提供了重新啟動策略 來控制容器在退出時或Docker重新啟動時是否自動啟動。重新啟動策略可確保以正確的順序啟動鏈接的容器。Docker建議您使用重新啟動策略,並避免使用進程管理器來啟動容器。
重新啟動策略--live-restore與dockerd 命令的標志不同。--live-restore盡管網絡和用戶輸入中斷,但使用允許您在Docker升級期間保持容器運行。
使用重啟策略
要為容器配置重新啟動策略,請--restart在使用該docker run命令時使用該標志。--restart標志的值可以是以下任何一種:
| 旗 | 描述 |
|---|---|
no |
不要自動重啟容器。(默認) |
on-failure |
如果容器由於錯誤而退出,則重新啟動容器,該錯誤表現為非零退出代碼。 |
always |
如果容器停止,請務必重啟容器。如果手動停止,則僅在Docker守護程序重新啟動或手動重新啟動容器本身時才重新啟動。(參見重啟政策詳情中列出的第二個項目) |
unless-stopped |
類似於always,除了當容器停止(手動或其他方式)時,即使在Docker守護程序重新啟動后也不會重新啟動容器。 |
以下示例啟動Redis容器並將其配置為始終重新啟動,除非明確停止或重新啟動Docker。
$ docker run -dit --restart unless-stopped redis
重啟政策詳情
使用重啟策略時請記住以下幾點:
-
重啟策略僅在容器成功啟動后生效。在這種情況下,成功啟動意味着容器啟動至少10秒並且Docker已開始監視它。這可以防止根本不啟動的容器進入重啟循環。
-
如果手動停止容器,則會忽略其重新啟動策略,直到Docker守護程序重新啟動或手動重新啟動容器。這是防止重啟循環的另一種嘗試。
-
重新啟動策略僅適用於容器。群組服務的重新啟動策略配置不同。請參閱與服務重新啟動相關的 標志。
如果run時沒有添加restart 可以通過update命令追加
docker update --restart=always web
1、先后台啟動容器未加restart參數
2、docker ps 查看了當前運行的容器
3、重啟docker 服務
4、再次docker ps 查看當前運行的容器,發現容器並沒有運行
5、利用 update 設置 restart=always
6、重啟docker 服務
7、再次docker ps 查看當前運行的容器,此時發現已經自動啟動容器
---------------------
使用流程管理器
如果重新啟動策略不適合您的需要,例如當Docker之外的進程依賴Docker容器時,您可以使用流程管理器,例如 upstart, systemd或supervisor。
警告:不要嘗試將Docker重新啟動策略與主機級進程管理器結合使用,因為這會產生沖突。
要使用進程管理器,請將其配置為使用您通常用於手動啟動容器的相同docker start或docker service命令來啟動容器或服務。有關更多詳細信息,請參閱特定流程管理器的文檔。
在容器內使用進程管理器
進程管理器也可以在容器內運行,以檢查進程是否正在運行,如果沒有則啟動/重啟進程
官方介紹在此,以上內容引用官網內容
https://docs.docker.com/engine/admin/start-containers-automatically/#use-a-process-manager
