docker容器默認不會自動重啟,但可通過設置restart策略實現自愈。常用的策略包括no(默認不重啟)、on-failure(出錯時重啟并可設最大重試次數)、always(無論原因都重啟)和unless-stopped(類似always但不受守護進程重啟影響)。設置方法有兩種:1.運行容器時使用–restart參數,如docker run -d –restart always my-image;2.在docker-compose.yml中配置restart屬性。使用時需注意避免因依賴服務未就緒導致的重啟死循環,并合理選擇策略以適應不同場景。
Docker 容器默認不會在宿主機重啟或自身異常退出后自動恢復。但你可以通過設置 restart 策略,讓容器具備一定的“自愈”能力。這個功能其實很簡單,但用對了能省不少心。
一、什么是 restart 策略?
restart 策略是 Docker 提供的一個選項,用于控制容器在退出時是否自動重啟。它不是“永遠運行”,而是根據設定的條件來決定要不要重新啟動容器。
比如你跑一個 web 服務,如果程序崩潰退出了,默認是不會重啟的。但如果你設置了 –restart=always,那不管因為什么原因退出,Docker 都會嘗試把它拉起來。
二、常用的 restart 策略有哪些?
Docker 支持以下幾種常見的 restart 策略:
- no:默認值,不自動重啟。
- on-failure[:max-retries]:只有在容器退出狀態碼非0(出錯)時才重啟,可以加個最大重試次數。
- always:只要容器停止,不管是不是正常退出,都會重啟。
- unless-stopped:和 always 類似,但它不會因為 Docker 守護進程重啟而自動重啟,除非手動停止過。
舉個例子:
docker run -d --restart unless-stopped my-web-app
這條命令會讓容器一直保持運行狀態,即使服務器重啟了,也會自動拉起。
三、怎么設置 restart 策略?
設置方式有兩種:創建容器時指定,或者在 compose 文件里寫好。
1. 使用命令行參數
在運行容器的時候加上 –restart 參數即可:
docker run -d --restart always my-image
2. 在 docker-compose.yml 中配置
如果是用 docker-compose,可以在服務定義里加一行:
services: web: image: my-web restart: unless-stopped
這樣管理多個容器的時候更方便,也更容易維護。
四、使用中要注意什么?
雖然 restart 很實用,但也不是隨便亂設。
-
如果你的容器依賴外部服務(比如數據庫),頻繁重啟可能會導致死循環,卡在不斷重啟的狀態。
-
on-failure 可以加重試次數限制,避免無限重啟。例如:
docker run -d --restart on-failure:5 my-image
表示最多嘗試重啟 5 次,失敗就放棄。
-
如果你不希望容器隨著系統重啟自動拉起,那就別用 always 或 unless-stopped。
基本上就這些。設置容器的自動重啟不算復雜,但在生產環境使用時要結合實際情況考慮清楚策略的選擇。