限制
WSL 對 ECI 的支援
注意
Docker Desktop 需要 WSL 2 版本 1.1.3.0 或更高版本。要獲取主機上當前安裝的 WSL 版本,請在 Windows 命令提示符或 PowerShell 終端中輸入
wsl --version
。如果命令失敗或返回的版本號低於 1.1.3.0,請透過輸入wsl --update
將 WSL 更新到最新版本。
WSL 上的 ECI 不如 Hyper-V 上的 ECI 安全,原因如下:
雖然 WSL 上的 ECI 仍會強化容器,使惡意工作負載不易突破 Docker Desktop 的 Linux VM,但 WSL 上的 ECI 無法阻止 Docker Desktop 使用者突破 Docker Desktop Linux VM。此類使用者可以使用
wsl -d docker-desktop
命令(以 root 身份)輕鬆訪問該 VM,並利用此訪問許可權修改 VM 內的 Docker Engine 設定。這使得 Docker Desktop 使用者可以控制 Docker Desktop VM,並繞過管理員透過settings-management 功能設定的 Docker Desktop 配置。相比之下,Hyper-V 上的 ECI 不允許 Docker Desktop 使用者突破 Docker Desktop Linux VM。使用 WSL 2 時,同一 Windows 主機上的所有 WSL 2 分發版共享相同的 Linux 核心例項。因此,Docker Desktop 無法確保 Docker Desktop Linux VM 中核心的完整性,因為另一個 WSL 2 分發版可能會修改共享核心設定。相比之下,使用 Hyper-V 時,Docker Desktop Linux VM 擁有一個專用核心,完全由 Docker Desktop 控制。
下表總結了這一點。
安全特性 | WSL 上的 ECI | Hyper-V 上的 ECI | 備註 |
---|---|---|---|
強力保護容器 | 是 | 是 | 使惡意容器工作負載更難突破 Docker Desktop Linux VM 和宿主。 |
Docker Desktop Linux VM 免受使用者訪問 | 否 | 是 | 在 WSL 上,使用者可以直接訪問 Docker Engine 或繞過 Docker Desktop 安全設定。 |
Docker Desktop Linux VM 擁有專用核心 | 否 | 是 | 在 WSL 上,Docker Desktop 無法保證核心級配置的完整性。 |
總的來說,結合 Hyper-V 使用 ECI 比結合 WSL 2 使用更安全。但是 WSL 2 在主機效能和資源利用方面具有優勢,並且是使用者在 Windows 主機上執行喜愛的 Linux 分發版並從其中訪問 Docker 的絕佳方式。
使用“docker”驅動程式的 Docker 構建的 ECI 保護
在 Docker Desktop 4.30 之前,使用 buildx docker
驅動程式(預設)的 docker build
命令不受 ECI 保護,換句話說,構建在 Docker Desktop VM 內以 root 身份執行。
從 Docker Desktop 4.30 開始,使用 buildx docker
驅動程式的 docker build
命令受到 ECI 保護,除非 Docker Desktop 配置為使用 WSL 2(在 Windows 主機上)。
請注意,使用 docker-container
驅動程式的 docker build
命令始終受到 ECI 保護。
Docker Build 和 Buildx 的一些限制
啟用 ECI 後,不允許使用 Docker build --network=host
和 Docker Buildx 特權 (network.host
, security.insecure
)。需要這些的構建將無法正常工作。
Kubernetes Pod 尚不受保護
使用 Docker Desktop 整合的 Kubernetes 時,Pod 尚不受 ECI 保護。因此,惡意或特權 Pod 可能會危及 Docker Desktop Linux VM 並繞過安全控制。
作為替代方案,您可以結合 ECI 使用 K8s.io KinD 工具。在這種情況下,每個 Kubernetes 節點都在 ECI 保護的容器內執行,從而將 Kubernetes 叢集更強力地與底層 Docker Desktop Linux VM(及其中的 Docker Engine)隔離開來。無需特殊設定,只需啟用 ECI 並像往常一樣執行 KinD 工具即可。
擴充套件容器尚不受保護
擴充套件容器目前也不受 ECI 保護。請確保您的擴充套件容器來自受信任的實體,以避免問題。
Docker Desktop 開發環境尚不受保護
Docker Desktop 開發環境功能啟動的容器尚不受保護。
Docker Debug 容器尚不受 ECI 保護。
Docker Debug 容器尚不受 ECI 保護。
不支援原生 Windows 容器
ECI 僅在 Docker Desktop 處於 Linux 容器模式(預設、最常用模式)時有效。當 Docker Desktop 配置為原生 Windows 容器模式時(即,在 Windows 主機上,當 Docker Desktop 從其預設的 Linux 模式切換到原生 Windows 模式時),不支援 ECI。
在生產環境中使用
通常,使用者在使用啟用 ECI 的 Docker Desktop(使用 Sysbox 執行時)執行容器與透過標準 OCI runc
執行時在生產環境中運行同一容器時,不應感受到差異。
然而,在某些情況下,特別是在容器中執行高階或特權工作負載時,使用者可能會遇到一些差異。尤其是,容器可能在 ECI 下執行良好,但在 runc
下不行,反之亦然。