即時還原

預設情況下,當 Docker 守護行程終止時,它會關閉正在執行的容器。您可以設定守護行程,以便在守護行程無法使用時容器 tetap 執行。此功能稱為*即時還原*。即時還原選項有助於減少因守護行程崩潰、計畫性停機或升級而導致的容器停機時間。

注意

Windows 容器不支援即時還原,但在 Windows 版 Docker Desktop 上執行的 Linux 容器則支援。

啟用即時還原

有兩種方法可以啟用即時還原設定,以便在守護行程無法使用時保持容器活動。**僅執行下列其中一項**。

  • 將設定新增至守護行程設定檔。在 Linux 上,預設為 `/etc/docker/daemon.json`。在 Mac 版 Docker Desktop 或 Windows 版 Docker Desktop 上,從工作列中選取 Docker 圖示,然後按一下**設定**->**Docker 引擎**。

    • 使用以下 JSON 啟用 `live-restore`。

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

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

升級期間的即時還原

即時還原允許您在 Docker 守護行程更新期間保持容器執行,但僅在安裝修補程式版本(`YY.MM.x`)時支援,主要(`YY.MM`)守護行程升級則不支援。

如果您在升級期間跳過版本,守護行程可能無法還原其與容器的連線。如果守護行程無法還原連線,它就無法管理正在執行的容器,您必須手動停止它們。

重新啟動時的即時還原

僅當守護行程選項(例如橋接器 IP 位址和圖形驅動程式)未更改時,即時還原選項才能還原容器。如果任何這些守護行程級別的設定選項已更改,即時還原可能無法運作,您可能需要手動停止容器。

即時還原對執行中容器的影響

如果守護行程長時間關閉,正在執行的容器可能會填滿守護行程通常讀取的 FIFO 記錄。完整記錄會阻止容器記錄更多資料。預設緩衝區大小為 64K。如果緩衝區已滿,您必須重新啟動 Docker 守護行程才能清除它們。

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

即時還原和 Swarm 模式

即時還原選項僅適用於獨立容器,不適用於 Swarm 服務。Swarm 服務由 Swarm 管理器管理。如果 Swarm 管理器不可用,Swarm 服務將繼續在工作節點上執行,但在有足夠的 Swarm 管理器可用來維持仲裁之前,無法管理它們。