3 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
Docker中有 4 種不同的重啟策略:
no
- 不要自動(dòng)重啟容器。(默認(rèn))on-failure
- 如果容器因錯(cuò)誤退出,則重新啟動(dòng)容器,這表現(xiàn)為非零退出代碼。always
- 如果容器停止,請(qǐng)始終重新啟動(dòng)容器unless-stopped
- 與 always 類(lèi)似,除了當(dāng)容器停止(手動(dòng)或其他方式)時(shí),即使在 Docker 守護(hù)程序重新啟動(dòng)后也不會(huì)重新啟動(dòng)。
docker 無(wú)法從應(yīng)用程序中“檢測(cè)”一種錯(cuò)誤類(lèi)型并根據(jù)它重新啟動(dòng)或不重新啟動(dòng)。
實(shí)現(xiàn)此目的的一種方法是在您的容器中使用supervisord,并讓它根據(jù)您定義的退出代碼列表來(lái)處理重啟。但這意味著您的容器只會(huì)在 supervisord 崩潰時(shí)重新啟動(dòng),而不是在您的應(yīng)用程序崩潰時(shí)重新啟動(dòng),并且您必須更改代碼以針對(duì)應(yīng)該重新啟動(dòng)的錯(cuò)誤和不應(yīng)該重新啟動(dòng)的錯(cuò)誤返回不同的退出代碼。

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
因?yàn)槲蚁胍獙?shí)現(xiàn)的目標(biāo)似乎不太可能,所以我再次閱讀了文檔(https://docs.docker.com/engine/reference/commandline/service_create/)并找到了可以--restart-max-attempts
解決我的無(wú)限循環(huán)問(wèn)題的選項(xiàng).

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
您可能想嘗試并實(shí)現(xiàn)docker stack基于 docker-compose 文件的創(chuàng)建。
在這種情況下,正如compose v3 文檔所示,您可以完全控制服務(wù)重啟策略。
下一個(gè)示例不允許重新啟動(dòng):
version: "3.9"
services:
python:
image: my_user/my_repo:my_container
volumes:
- /home/python:/home
deploy:
restart_policy:
condition: none
您可以使用和調(diào)整restart_policy塊condition: [none | on-failure | any]max_attempts: [your_int]
添加回答
舉報(bào)