限制

WSL 的 ECI 支援

注意

Docker Desktop 需要 WSL 2 版本 1.1.3.0 或更高版本。如需取得主機上目前的 WSL 版本,請輸入 wsl --version。如果指令失敗或傳回的版本號碼早於 1.1.3.0,請在 Windows 命令或 PowerShell 終端機中輸入 wsl --update,將 WSL 更新至最新版本。

WSL 上的 ECI 不如 Hyper-V 上的 ECI 安全,因為

  • 雖然 WSL 上的 ECI 仍然會強化容器,讓惡意工作負載不容易入侵 Docker Desktop 的 Linux 虛擬機器,但 WSL 上的 ECI 無法阻止 Docker Desktop 使用者入侵 Docker Desktop Linux 虛擬機器。這些使用者可以輕鬆地使用 wsl -d docker-desktop 指令以 root 身分存取該虛擬機器,並使用該存取權修改虛擬機器內的 Docker Engine 設定。這讓 Docker Desktop 使用者可以控制 Docker Desktop 虛擬機器,並讓他們繞過管理員透過設定管理功能設定的 Docker Desktop 設定。相反地,Hyper-V 上的 ECI 不允許 Docker Desktop 使用者入侵 Docker Desktop Linux 虛擬機器。

  • 使用 WSL 2 時,同一個 Windows 主機上的所有 WSL 2 發行版本都會共用同一個 Linux 核心執行個體。因此,Docker Desktop 無法確保 Docker Desktop Linux 虛擬機器中核心的完整性,因為另一個 WSL 2 發行版本可能會修改共用的核心設定。相反地,使用 Hyper-V 時,Docker Desktop Linux 虛擬機器會有專用的核心,完全由 Docker Desktop 控制。

下表總結了這一點。

安全性功能WSL 上的 ECIHyper-V 上的 ECI備註
高度安全的容器使惡意容器工作負載更難以入侵 Docker Desktop Linux 虛擬機器和主機
Docker Desktop Linux 虛擬機器受到保護,防止使用者存取
在 WSL 上,使用者可以直接存取 Docker Engine 或繞過 Docker Desktop 安全性設定。Docker Desktop Linux 虛擬機器具有專用核心

使用「docker」驅動程式為 Docker 建置提供 ECI 保護

在 WSL 上,Docker Desktop 無法保證核心層級設定的完整性

一般來說,將 ECI 與 Hyper-V 搭配使用比與 WSL 2 搭配使用更安全。但 WSL 2 在主機的效能和資源利用率方面具有優勢,而且是使用者在 Windows 主機上執行慣用的 Linux 發行版本並從中存取 Docker 的絕佳方式。

在 Docker Desktop 4.30 之前,使用 buildx docker 驅動程式(預設)的 docker build 指令不受 ECI 保護,換句話說,建置會在 Docker Desktop 虛擬機器內以 root 身分執行。

Docker Build 和 Buildx 有一些限制

在啟用 ECI 的情況下,不允許 Docker build --network=host 和 Docker Buildx 權限(network.hostsecurity.insecure)。需要這些權限的建置將無法正常運作。

Kubernetes Pod 尚未受到保護

使用 Docker Desktop 整合式 Kubernetes 時,Pod 尚未受到 ECI 保護。因此,惡意或具備特權的 Pod 可能會危害 Docker Desktop Linux 虛擬機,並繞過安全控制。

或者,您可以搭配 ECI 使用 K8s.io KinD 工具。在這種情況下,每個 Kubernetes 節點都會在受 ECI 保護的容器內執行,從而將 Kubernetes 叢集與底層 Docker Desktop Linux 虛擬機(以及其中的 Docker Engine)更強地隔離開來。無需特殊安排,只需啟用 ECI 並照常執行 KinD 工具即可。

擴充功能容器尚未受到保護

擴充容器也尚未受到 ECI 保護。請確保您的擴充容器來自受信任的實體,以避免發生問題。

Docker Desktop 開發環境尚未受到保護

Docker Desktop 開發環境功能啟動的容器尚未受到保護。

Docker Debug 容器尚未受到保護

Docker Debug 容器尚未受到 ECI 保護。

不支援原生 Windows 容器

ECI 僅在 Docker Desktop 處於 Linux 容器模式(預設、最常見的模式)時才有效。當 Docker Desktop 設定為原生 Windows 容器模式時,則不支援 ECI(亦即,在 Windows 主機上,當 Docker Desktop 從其預設的 Linux 模式切換到原生 Windows 模式時,不支援 ECI)。

在生產環境中使用

一般來說,使用者在啟用 ECI 的 Docker Desktop 中執行容器(使用 Sysbox 執行階段)與透過標準 OCI runc 執行階段在生產環境中執行相同的容器之間,應該不會感受到差異。

但在某些情況下,通常是在容器中執行進階或具備特權的工作負載時,使用者可能會感受到一些差異。尤其是,容器可能可以使用 ECI 執行,但不能使用 runc 執行,反之亦然。