限制

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 上那样安全,因为

  • 虽然 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 虚拟机具有专用内核在 WSL 上,Docker Desktop 无法保证内核级配置的完整性。

总的来说,与 WSL 2 相比,使用 Hyper-V 的 ECI 更安全。但 WSL 2 为主机上的性能和资源利用率提供了优势,它是用户在 Windows 主机上运行他们最喜欢的 Linux 发行版并在其中访问 Docker 的绝佳方式。

使用“docker”驱动程序的 Docker 构建的 ECI 保护

在 Docker Desktop 4.30 之前,使用 buildx docker 驱动程序(默认)的 docker build 命令不受 ECI 保护,换句话说,构建在 Docker Desktop 虚拟机内部以 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.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 调试容器尚未受到保护

Docker 调试 容器目前也不受 ECI 保护。

不支持原生 Windows 容器

只有在 Docker Desktop 处于 Linux 容器模式(默认模式,最常见模式)下,ECI 才能正常工作。在 Docker Desktop 配置为原生 Windows 容器模式时(即,在 Windows 主机上不支持,当 Docker Desktop 从默认的 Linux 模式切换到原生 Windows 模式时),它不受支持。

生产环境中的使用

通常情况下,用户在启用 ECI(使用 Sysbox 运行时)的 Docker Desktop 中运行容器与在生产环境中通过标准 OCI runc 运行时运行同一容器之间不会遇到差异。

但是,在某些情况下,通常是在容器中运行高级或特权工作负载时,用户可能会遇到一些差异。特别是,容器可能在使用 ECI 时运行,但在使用 runc 时却不能运行,反之亦然。