即時還原

預設情況下,當 Docker daemon 終止時,它會關閉正在執行的容器。您可以設定 daemon,以便在 daemon 無法使用時,容器仍能保持執行。此功能稱為「即時恢復」(live restore)。Live restore 選項有助於減少因 daemon 當機、計劃性停機或升級而導致的容器停機時間。

注意

Windows 容器不支援 Live restore,但它適用於在 Docker Desktop for Windows 上執行的 Linux 容器。

啟用 Live restore (即時恢復)

有兩種方法可以啟用 Live restore 設定,以在 daemon 無法使用時保持容器執行。請僅執行以下其中一種方法

  • 將配置加入 daemon 設定檔。在 Linux 上,預設為 /etc/docker/daemon.json。在 Docker Desktop for Mac 或 Docker Desktop for Windows 上,從工作列選擇 Docker 圖示,然後點擊 Settings -> Docker Engine

    • 使用以下 JSON 來啟用 live-restore

      {
        "live-restore": true
      }
    • 重新啟動 Docker daemon。在 Linux 上,您可以透過重新載入 Docker daemon 來避免重新啟動(並避免容器產生任何停機時間)。如果您使用 systemd,請使用指令 systemctl reload docker。否則,請向 dockerd 行程發送 SIGHUP 訊號。

  • 如果願意,您可以手動使用 --live-restore 旗標啟動 dockerd 行程。不建議採用這種方法,因為它不會設定 systemd 或其他行程管理員在啟動 Docker 行程時所使用的環境。這可能會導致預期之外的行為。

升級期間的 Live restore

Live restore 允許您在 Docker daemon 更新期間保持容器執行,但僅在安裝修補程式版本 (YY.MM.x) 時才支援,不適用於重大 (YY.MM) daemon 升級。

如果您在升級期間跳過了某些版本,daemon 可能無法恢復與容器的連線。如果 daemon 無法恢復連線,它將無法管理正在執行的容器,您必須手動停止它們。

重啟後的 Live restore

只有在 daemon 選項(例如橋接 IP 位址和圖形驅動程式)未變更的情況下,Live restore 選項才能成功恢復容器。如果這些 daemon 層級的配置選項有任何變更,Live restore 可能無法運作,您可能需要手動停止容器。

Live restore 對執行中容器的影響

如果 daemon 停機時間過長,正在執行的容器可能會填滿 daemon 通常會讀取的 FIFO 日誌。滿載的日誌會阻止容器記錄更多資料。預設緩衝區大小為 64K。如果緩衝區已滿,您必須重新啟動 Docker daemon 以將其清除。

在 Linux 上,您可以透過修改 /proc/sys/fs/pipe-max-size 來調整核心的緩衝區大小。您無法在 Docker Desktop for Mac 或 Docker Desktop for Windows 上修改緩衝區大小。

Live restore 與 Swarm 模式

Live restore 選項僅適用於獨立容器,不適用於 Swarm 服務。Swarm 服務由 Swarm 管理員管理。如果 Swarm 管理員無法使用,Swarm 服務會在工作節點上繼續執行,但在有足夠的 Swarm 管理員可用以維持法定人數 (quorum) 之前,將無法進行管理。

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.