即時恢復
預設情況下,當 Docker 守護程序終止時,它會關閉正在執行的容器。您可以配置守護程序,使其在變得不可用時,容器仍保持執行。此功能稱為即時恢復。即時恢復選項有助於減少因守護程序崩潰、計劃內停機或升級而導致的容器停機時間。
注意Windows 容器不支援即時恢復,但它適用於在 Docker Desktop for Windows 上執行的 Linux 容器。
啟用即時恢復
有兩種方法可以啟用即時恢復設定,以在守護程序不可用時保持容器執行。只需執行以下操作之一。
將配置新增到守護程序配置檔案中。在 Linux 上,預設為
/etc/docker/daemon.json
。在 Docker Desktop for Mac 或 Docker Desktop for Windows 上,從工作列中選擇 Docker 圖示,然後單擊設定 -> Docker Engine。使用以下 JSON 啟用
live-restore
。{ "live-restore": true }
重啟 Docker 守護程序。在 Linux 上,您可以透過重新載入 Docker 守護程序來避免重啟(並避免容器的任何停機時間)。如果您使用
systemd
,則使用命令systemctl reload docker
。否則,向dockerd
程序傳送一個SIGHUP
訊號。
如果您願意,也可以使用
--live-restore
標誌手動啟動dockerd
程序。不建議使用此方法,因為它不會設定systemd
或其他程序管理器在啟動 Docker 程序時使用的環境。這可能會導致意外行為。
升級期間的即時恢復
即時恢復允許您在 Docker 守護程序更新期間保持容器執行,但僅在安裝補丁版本 (YY.MM.x
) 時受支援,不適用於主要版本 (YY.MM
) 的守護程序升級。
如果您在升級過程中跳過某些版本,守護程序可能無法恢復其與容器的連線。如果守護程序無法恢復連線,它就無法管理正在執行的容器,您必須手動停止它們。
重啟時的即時恢復
即時恢復選項僅在守護程序選項(如網橋 IP 地址和圖形驅動程式)未更改時才能恢復容器。如果這些守護程序級別的配置選項有任何更改,即時恢復可能無法工作,您可能需要手動停止容器。
即時恢復對執行中容器的影響
如果守護程序長時間停機,執行中的容器可能會填滿守護程序通常讀取的 FIFO 日誌。日誌已滿會阻止容器記錄更多資料。預設緩衝區大小為 64K。如果緩衝區已滿,您必須重啟 Docker 守護程序來清空它們。
在 Linux 上,您可以透過更改 /proc/sys/fs/pipe-max-size
來修改核心的緩衝區大小。在 Docker Desktop for Mac 或 Docker Desktop for Windows 上,您無法修改緩衝區大小。
即時恢復和 Swarm 模式
即時恢復選項僅適用於獨立容器,不適用於 Swarm 服務。Swarm 服務由 Swarm 管理器管理。如果 Swarm 管理器不可用,Swarm 服務將繼續在工作節點上執行,但在有足夠的 Swarm 管理器可用來維持法定人數之前,無法進行管理。