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

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

不,您可以像往常一样继续使用 Docker。 ECI 通过创建更安全的容器来进行幕后工作。

所有容器工作负载都可以与 ECI 配合良好吗?

绝大多数容器工作负载在启用 ECI 的情况下都可以正常运行,但也有一些工作负载还不能正常运行。对于少数尚未支持增强型容器隔离的工作负载,Docker 正在继续改进该功能,以将其减少到最低限度。

我可以使用 ECI 运行特权容器吗?

是的,您可以在容器中使用该--privileged标志,但与没有 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 > Filesharing配置的那样。

启用ECI后是否可以将主机的Docker Socket挂载到容器中?

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

为了启用此类用例,可以配置 ECI 以允许 Docker 套接字安装到容器中,但仅限于您选择的(即受信任的)容器映像,甚至可以限制容器可以通过套接字向 Docker 引擎发送哪些命令。请参阅 ECI Docker 套接字安装权限

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

还没有。它保护用户通过docker create和 启动的所有容器docker run。此外,docker build当使用 docker-container 构建驱动程序时,它还可以保护隐式使用的容器。

它尚未保护构建驱动程序隐式使用的容器docker builddocker也不能保护 Docker Desktop Kubernetes Pod、扩展容器和 开发环境容器

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

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

ECI会影响容器的性能吗?

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

使用 ECI,用户仍然可以覆盖 CLI 中的 --runtime 标志吗?

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

原因runc是 ECI 不允许,因为它允许用户在 Docker Desktop Linux VM 上以“真正的 root”身份运行,从而为他们提供了对 VM 的隐式控制以及修改 Docker Desktop 管理配置的能力。

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

请参阅 它是如何工作的

ECI 与 Rootless Docker 有何不同?

查看 它是如何工作的