增强容器隔离常见问题解答
此页面解答了关于增强容器隔离 (ECI) 的常见问题,这些问题在主要文档中未涵盖。
启用 ECI 后,我需要改变使用 Docker 的方式吗?
不需要。ECI 通过创建更安全的容器在后台自动工作。您可以继续使用所有现有的 Docker 命令、工作流和开发工具,无需任何更改。
所有容器工作负载都能与 ECI 良好协作吗?
在 ECI 开启时,大多数容器工作负载都能正常运行。但是,一些需要特定内核级访问的“高级”工作负载可能无法运行。有关受影响的工作负载的详细信息,请参阅 ECI 限制。
为什么不直接限制使用 --privileged 标志?
特权容器用于 Docker-in-Docker、Kubernetes-in-Docker 和访问硬件设备等合法目的。ECI 提供了一个更好的解决方案,允许这些高级工作负载安全运行,同时防止它们损害 Docker Desktop VM。
ECI 会影响容器性能吗?
ECI 对容器性能的影响极小。唯一的例外是执行许多 mount 和 umount 系统调用的容器,因为这些容器会由 Sysbox 运行时进行安全检查。大多数开发工作负载没有明显的性能差异。
启用 ECI 后,我可以覆盖容器运行时吗?
不。启用 ECI 后,所有容器都使用 Sysbox 运行时,无论是否存在任何 --runtime 标志。
$ docker run --runtime=runc alpine echo "test"
# This still uses sysbox-runc, not runc
忽略 --runtime 标志是为了防止用户通过在 Docker Desktop VM 中以真正的 root 身份运行容器来绕过 ECI 安全。
ECI 能保护在启用之前创建的容器吗?
不。ECI 仅保护在启用后创建的容器。在启用 ECI 之前移除现有容器。
$ docker stop $(docker ps -q)
$ docker rm $(docker ps -aq)
有关更多详细信息,请参阅 启用增强容器隔离。
ECI 保护哪些容器?
ECI 保护因容器类型和 Docker Desktop 版本而异。
始终受保护
- 使用
docker run和docker create创建的容器 - 使用
docker-container构建驱动程序的容器
版本相关
- Docker Build:在 Docker Desktop 4.30+ 中受保护(WSL 2 除外)
- Kubernetes:在使用 kind provisioner 时,在 Docker Desktop 4.38+ 中受保护
不受保护
- Docker 扩展
- Docker Debug 容器
- 使用 Kubeadm provisioner 的 Kubernetes
有关完整详细信息,请参阅 ECI 限制。
启用 ECI 后,我可以挂载 Docker socket 吗?
默认情况下,不能。ECI 为了安全起见会阻止 Docker socket 绑定挂载。但是,您可以为 Testcontainers 等受信任的镜像配置例外。
有关配置详细信息,请参阅 配置 Docker socket 例外。
ECI 限制哪些绑定挂载?
ECI 限制 Docker Desktop VM 目录的绑定挂载,但允许在 Docker Desktop 设置中配置的主机目录挂载。