增强型容器隔离 (ECI) 常见问题解答

启用 ECI 后,我是否需要更改使用 Docker 的方式?

不需要,您可以继续像往常一样使用 Docker。ECI 在后台运行,创建一个更安全的容器。

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

绝大多数容器工作负载可以在启用 ECI 的情况下正常运行,但少数工作负载不能(尚未)。对于那些尚未与增强型容器隔离配合使用的少数工作负载,Docker 正在继续改进此功能,以最大程度地减少这种情况。

我可以在 ECI 中运行特权容器吗?

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

所有特权容器工作负载都可以在 ECI 中运行吗?

不能。希望访问 Docker Desktop Linux 虚拟机中的全局内核资源的特权容器工作负载将无法运行。例如,您无法使用特权容器加载内核模块。

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

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

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

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

是的,它会限制将位于 Docker Desktop Linux 虚拟机中的目录绑定挂载到容器中。

它不会限制将您的主机文件绑定挂载到容器中,如通过 Docker Desktop 的 **设置** > **资源** > **文件共享** 配置的那样。

启用 ECI 后,我是否可以将主机的 Docker 套接字挂载到容器中?

默认情况下,ECI 会出于安全原因阻止将主机的 Docker 套接字绑定挂载到容器中。但是,此操作有一些合法用例,例如使用 Testcontainers 进行本地测试。

为了支持此类用例,可以配置 ECI 允许将 Docker 套接字挂载到容器中,但这仅限于您选择的(即,受信任的)容器镜像,甚至可以限制容器可以通过套接字发送到 Docker 引擎的命令。请参见 ECI Docker 套接字挂载权限

ECI 是否会保护所有使用 Docker Desktop 启动的容器?

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

在 Docker Desktop 4.30 之前,它不会隐式地保护由 docker builddocker 构建驱动程序(默认驱动程序)一起使用的容器。从 Docker Desktop 4.30 开始,它会保护此类容器,但 Docker Desktop 在 WSL 2(Windows 主机)上除外。

请注意,自 Docker Desktop 4.19 起,在所有受支持的平台(带有 WSL 2 或 Hyper-V 的 Windows、Mac 和 Linux)上,ECI 始终会保护使用 docker-container 构建驱动程序docker build 使用的容器。

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

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

不会。在启用 ECI 之前创建的容器不受保护。因此,我们建议在启用 ECI 之前删除所有容器。

ECI 是否会影响容器的性能?

ECI 对容器的性能影响很小。唯一的例外是执行大量 mountumount 系统调用的容器,因为这些调用会被 Sysbox 容器运行时捕获和验证,以确保它们不被用于破坏容器的文件系统。

使用 ECI 后,用户是否仍可以从 CLI 覆盖 --runtime 标志?

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

之所以在 ECI 中禁用 runc,是因为它允许用户以“真实 root”身份在 Docker Desktop Linux 虚拟机中运行,从而为他们提供对虚拟机的隐式控制权,以及修改 Docker Desktop 管理配置的能力,例如。

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

请参见 工作原理

ECI 与无根 Docker 有何不同?

请参见 工作原理