即時恢復

預設情況下,當 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 管理器可用來維持法定人數之前,無法進行管理。