增强型容器隔离限制

订阅: 商业版
适用于: 管理员

增强型容器隔离具有一些平台特定的限制和功能约束。了解这些限制有助于您规划安全策略并设定适当的预期。

WSL 2 安全注意事项

注意

Docker Desktop 需要 WSL 2 版本 2.1.5 或更高版本。使用 wsl --version 检查您的版本,如有需要,使用 wsl --update 进行更新。

增强型容器隔离根据您的 Windows 后端配置提供不同的安全级别。

下表比较了 WSL 2 上的 ECI 和 Hyper-V 上的 ECI

安全功能WSL 上的 ECIHyper-V 上的 ECI评论
强力安全容器使恶意容器工作负载更难突破 Docker Desktop Linux 虚拟机和主机。
Docker Desktop Linux 虚拟机受保护,防止用户访问在 WSL 上,用户可以直接访问 Docker 引擎或绕过 Docker Desktop 安全设置。
Docker Desktop Linux 虚拟机具有专用内核在 WSL 上,Docker Desktop 无法保证内核级配置的完整性。

WSL 2 安全漏洞包括

  • 直接虚拟机访问:用户可以通过直接访问虚拟机绕过 Docker Desktop 安全:wsl -d docker-desktop。这使得用户拥有 root 权限,可以修改 Docker 引擎设置并绕过设置管理配置。
  • 共享内核漏洞:所有 WSL 2 发行版共享相同的 Linux 内核实例。其他 WSL 发行版可以修改影响 Docker Desktop 安全性的内核设置。

建议

使用 Hyper-V 后端以获得最大安全性。WSL 2 提供更好的性能和资源利用率,但安全隔离性降低。

不支持 Windows 容器

ECI 仅适用于 Linux 容器(Docker Desktop 的默认模式)。不支持原生 Windows 容器模式。

Docker Build 保护有所不同

Docker Build 保护取决于驱动程序和 Docker Desktop 版本

构建驱动保护版本要求
docker(默认)受保护Docker Desktop 4.30 及更高版本(WSL 2 除外)
docker(传统)未受保护Docker Desktop 4.30 之前的版本
docker-container始终受保护所有 Docker Desktop 版本

以下 Docker Build 功能不适用于 ECI

  • docker build --network=host
  • Docker Buildx 授权:network.host, security.insecure

建议

需要这些功能的构建请使用 docker-container 构建驱动

$ docker buildx create --driver docker-container --use
$ docker buildx build --network=host .

Docker Desktop Kubernetes 未受保护

集成 Kubernetes 功能不受 ECI 保护。恶意或特权 pod 可能会损害 Docker Desktop 虚拟机并绕过安全控制。

建议

使用 Docker 中的 Kubernetes (KinD) 来实现 ECI 保护的 Kubernetes

$ kind create cluster

启用 ECI 后,每个 Kubernetes 节点都在 ECI 保护的容器中运行,从而提供与 Docker Desktop 虚拟机更强的隔离。

未受保护的容器类型

以下容器类型目前不受 ECI 保护

  • Docker 扩展:扩展容器在没有 ECI 保护的情况下运行
  • Docker Debug:Docker Debug 容器绕过 ECI 限制
  • Kubernetes Pod:当使用 Docker Desktop 的集成 Kubernetes 时

建议

仅使用来自受信任来源的扩展,并避免在对安全性敏感的环境中使用 Docker Debug。

全局命令限制

命令列表适用于所有允许挂载 Docker socket 的容器。您无法为每个容器镜像配置不同的命令限制。

不支持本地镜像

您不能允许任意本地镜像(不在注册表中的镜像)挂载 Docker socket,除非它们是

  • 派生自允许的基础镜像(带 allowDerivedImages: true
  • 使用通配符允许列表("*",Docker Desktop 4.36 及更高版本)

不支持的 Docker 命令

这些 Docker 命令尚未在命令列表限制中受支持

  • compose:Docker Compose 命令
  • dev:开发环境命令
  • extension:Docker 扩展管理
  • feedback:Docker 反馈提交
  • init:Docker 初始化命令
  • manifest:镜像清单管理
  • plugin:插件管理
  • sbom:软件物料清单
  • scout:Docker Scout 命令
  • trust:镜像信任管理

性能考量

派生镜像影响

启用 allowDerivedImages: true 会使容器启动时间增加约 1 秒,用于镜像验证。

注册表依赖

  • Docker Desktop 定期从注册表获取镜像摘要进行验证
  • 首次容器启动需要访问注册表来验证允许的镜像
  • 网络连接问题可能会导致容器启动延迟

镜像摘要验证

当注册表中的允许镜像更新时,本地容器可能会意外被阻止,直到您刷新本地镜像

$ docker image rm <image>
$ docker pull <image>

版本兼容性

ECI 功能已在不同的 Docker Desktop 版本中推出

  • Docker Desktop 4.36 及更高版本:通配符允许列表支持 ("*") 和改进的派生镜像处理
  • Docker Desktop 4.34 及更高版本:派生镜像支持 (allowDerivedImages)
  • Docker Desktop 4.30 及更高版本:带默认驱动的 Docker Build 保护(WSL 2 除外)
  • Docker Desktop 4.13 及更高版本:核心 ECI 功能

如需最新功能可用性,请使用最新版本的 Docker Desktop。

生产兼容性

容器行为差异

大多数容器在启用和不启用 ECI 的情况下运行方式相同。但是,某些高级工作负载的行为可能会有所不同

  • 需要加载内核模块的容器
  • 修改全局内核设置的工作负载(BPF、sysctl)
  • 需要特定权限提升行为的应用程序
  • 需要直接硬件设备访问的工具

在生产部署之前,请在开发环境中测试带有 ECI 的高级工作负载,以确保兼容性。

运行时考量

使用 Sysbox 运行时(带 ECI)的容器与生产中的标准 OCI runc 运行时相比,可能存在细微差异。这些差异通常只影响特权或系统级操作。

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