即時恢復

預設情況下,當 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 管理器可用以維持法定人數。