增强容器隔离常见问题

目录

开启 ECI 后,我需要改变使用 Docker 的方式吗?

不需要,你可以继续照常使用 Docker。ECI 通过创建一个更安全的容器在底层工作。

所有容器工作负载都能很好地与 ECI 配合使用吗?

绝大多数容器工作负载在启用 ECI 后运行良好,但少数目前不能(尚未)。对于少数暂不支持增强容器隔离的工作负载,Docker 正在持续改进此功能,以将其降至最低。

我可以在启用 ECI 的情况下运行特权容器吗?

是的,你可以在容器中使用 --privileged 标志,但与未启用 ECI 的特权容器不同,启用 ECI 的容器只能使用其提升的特权访问分配给该容器的资源。它无法访问 Docker Desktop Linux VM 中的全局内核资源。这允许你安全地运行特权容器(包括 Docker-in-Docker)。有关更多信息,请参阅主要特性和优势

所有特权容器工作负载都能在启用 ECI 的情况下运行吗?

不能。需要访问 Docker Desktop Linux VM 内全局内核资源的特权容器工作负载将无法运行。例如,你不能使用特权容器加载内核模块。

为什么不直接限制使用 --privileged 标志?

特权容器通常用于在容器中运行高级工作负载,例如 Docker-in-Docker 或 Kubernetes-in-Docker,执行加载模块等内核操作,或访问硬件设备。

ECI 允许运行高级工作负载,但拒绝执行内核操作或访问硬件设备的能力。

ECI 是否限制容器内的绑定挂载?

是的,它限制将 Docker Desktop Linux VM 中目录绑定挂载到容器内。

它不限制将你的主机文件绑定挂载到容器内,这可以在 Docker Desktop 的 Settings > Resources > File Sharing 中配置。

在启用 ECI 时,我可以将主机的 Docker Socket 挂载到容器中吗?

默认情况下,出于安全原因,ECI 会阻止将主机的 Docker socket 绑定挂载到容器中。但是,这也有合理的用例,例如在使用 Testcontainers 进行本地测试时。

为了支持此类用例,可以配置 ECI 允许将 Docker socket 挂载到容器中,但仅限于你选择的(即受信任的)容器镜像,并且甚至可以限制容器通过 socket 发送给 Docker Engine 的命令。请参阅ECI Docker socket 挂载权限

ECI 会保护所有通过 Docker Desktop 启动的容器吗?

尚未完全实现。它保护用户通过 docker createdocker run 启动的所有容器。

对于 docker build 隐式创建的容器以及 Docker Desktop 集成的 Kubernetes,保护级别因 Docker Desktop 版本而异(请参阅以下两个常见问题)。

ECI 尚未保护 Docker Desktop 扩展容器和开发环境容器

ECI 是否保护 docker build 隐式使用的容器?

在 Docker Desktop 4.19 之前,ECI 不保护在构建过程中 docker build 隐式使用的容器。

自 Docker Desktop 4.19 起,ECI 在使用Docker 容器驱动时会保护 docker build 使用的容器。

此外,自 Docker Desktop 4.30 起,ECI 在使用默认的 "docker" 构建驱动时也会保护 docker build 使用的容器,但在 Windows with WSL 2 平台上除外。

ECI 是否保护 Docker Desktop 中的 Kubernetes?

在 Docker Desktop 4.38 之前,ECI 不保护 Docker Desktop 中集成的 Kubernetes 集群。

自 Docker Desktop 4.38 起,ECI 在使用新的 kind provisioner 时会保护集成的 Kubernetes 集群(请参阅在 Kubernetes 上部署)。在这种情况下,多节点 Kubernetes 集群中的每个节点实际上都是一个受 ECI 保护的容器。如果禁用 ECI,Kubernetes 集群中的每个节点都是一个安全性较低的完全特权容器。

ECI 在使用旧的 Kubeadm 单节点集群 provisioner 时不保护集成的 Kubernetes 集群。

ECI 是否保护在启用 ECI 之前启动的容器?

不保护。在开启 ECI 之前创建的容器不受保护。因此,建议你在开启 ECI 之前删除所有容器。

ECI 是否影响容器的性能?

ECI 对容器性能影响很小。例外情况是那些执行大量 mountumount 系统调用的容器,因为 Sysbox 容器运行时会捕获并审查这些调用,以确保它们没有被用于破坏容器的文件系统。

启用 ECI 后,用户仍然可以从 CLI 覆盖 --runtime 标志吗?

不能。启用 ECI 后,Sysbox 被设置为 Docker Desktop 用户部署容器的默认(也是唯一)运行时。如果用户试图覆盖运行时(例如,docker run --runtime=runc),此请求将被忽略,容器将通过 Sysbox 运行时创建。

禁止使用 runc 的原因在于它允许用户在 Docker Desktop Linux VM 上以“真正的 root”身份运行,从而让他们隐式控制 VM 并修改 Docker Desktop 的管理配置。

ECI 与 Docker Engine 的 userns-remap 模式有何不同?

请参阅工作原理

ECI 与 Rootless Docker 有何不同?

请参阅工作原理

页面选项
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.