?
This document uses PHP Chinese website manual Release
Docker提供了重新啟動(dòng)策略,以控制容器在退出時(shí)是自動(dòng)啟動(dòng)還是在Docker重新啟動(dòng)時(shí)啟動(dòng)。重新啟動(dòng)策略可確保鏈接的容器以正確的順序啟動(dòng)。Docker建議您使用重新啟動(dòng)策略,并避免使用流程管理器啟動(dòng)容器。
重新啟動(dòng)策略--live-restore
與dockerd
命令的標(biāo)志不同。使用--live-restore
允許您在Docker升級(jí)期間保持容器運(yùn)行,但網(wǎng)絡(luò)和用戶(hù)輸入將被中斷。
要為容器配置重新啟動(dòng)策略,請(qǐng)--restart
在使用docker run
命令時(shí)使用該標(biāo)志。--restart
標(biāo)志的值可以是以下任何一項(xiàng):
標(biāo)志 | 描述 |
---|---|
no | 不要自動(dòng)重啟容器。(默認(rèn)) |
on-failure | 如果容器由于錯(cuò)誤而退出,則將其重新啟動(dòng),該錯(cuò)誤表現(xiàn)為非零退出代碼。 |
unless-stopped | 重新啟動(dòng)容器,除非它明確停止或者Docker本身停止或重新啟動(dòng)。 |
always | 如果停止,請(qǐng)始終重新啟動(dòng)容器。 |
下面的示例啟動(dòng)Redis容器,并將其配置為始終重新啟動(dòng),除非顯式停止或重新啟動(dòng)Docker。
$ docker run -dit --restart unless-stopped redis
在使用重新啟動(dòng)策略時(shí),請(qǐng)記住以下幾點(diǎn):
重新啟動(dòng)策略?xún)H在容器成功啟動(dòng)后生效。在這種情況下,成功啟動(dòng)意味著容器至少要運(yùn)行10秒,而Docker已經(jīng)開(kāi)始監(jiān)視它。這樣可以防止一個(gè)根本不啟動(dòng)的容器進(jìn)入重新啟動(dòng)循環(huán)。
如果手動(dòng)停止容器,則會(huì)忽略它的重新啟動(dòng)策略,直到Docker守護(hù)進(jìn)程重新啟動(dòng)或手動(dòng)重新啟動(dòng)容器為止。這是防止重新啟動(dòng)循環(huán)的另一次嘗試。
重新啟動(dòng)策略?xún)H適用于容器。群集服務(wù)的重新啟動(dòng)策略配置不同。查看與重新啟動(dòng)服務(wù)相關(guān)的標(biāo)志。
如果重新啟動(dòng)策略不適合您的需求,例如Docker以外的進(jìn)程依賴(lài)于Docker容器,則可以使用諸如upstart,systemd或supervisor之類(lèi)的進(jìn)程管理器。
流程管理器在容器中運(yùn)行,檢查進(jìn)程是否正在運(yùn)行,如果沒(méi)有運(yùn)行,則啟動(dòng)進(jìn)程。它不支持Docker,但只監(jiān)視容器中的操作系統(tǒng)進(jìn)程。
Docker不推薦這種方法,因?yàn)樗蕾?lài)于平臺(tái),甚至在給定Linux發(fā)行版的不同版本中也不同。
警告不要嘗試將Docker重新啟動(dòng)策略與宿主級(jí)流程管理器相結(jié)合,因?yàn)檫@兩者將發(fā)生沖突。
要使用進(jìn)程管理器,請(qǐng)將其配置為使用您通常用來(lái)手動(dòng)啟動(dòng)容器的命令docker start
或docker service
命令啟動(dòng)容器或服務(wù)。有關(guān)更多詳細(xì)信息,請(qǐng)參閱特定流程管理器的文檔。