增强容器隔离常见问题解答

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

不可以,您可以继续照常使用 Docker。ECI 在幕后工作 创建更安全的容器。

是否所有容器工作负载都能与 ECI 配合使用?

绝大多数容器工作负载在启用 ECI 后运行良好,但少数 不要(还)。对于少数尚无法使用增强型容器的工作负载 隔离,Docker 正在继续改进该功能,将其降低到 最低。

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

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

所有特权容器工作负载都使用 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 套接字挂载到容器中吗?

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

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

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

还没有。它保护用户通过 和 启动的所有容器。docker createdocker run

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

请注意,在使用 docker-container 构建驱动程序时,ECI 始终保护 使用的容器,因为 Docker 电脑版 4.19 和所有支持的平台(带有 WSL 2 或 Hyper-V 的 Windows、Mac、 和 Linux)。docker build

ECI 尚未保护 Docker Desktop Kubernetes Pod、扩展容器、 和 Dev Environments 容器

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

不。在开启 ECI 之前创建的容器不受保护。因此,它是 建议您在开启 ECI 之前移除所有容器。

ECI 会影响容器的性能吗?

ECI 对 器皿。执行大量 and 系统调用的容器例外,因为这些调用由 Sysbox 容器捕获和审查 runtime 来确保它们不会被用来破坏容器的文件系统。mountumount

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

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

不允许的原因是它允许用户以 “true ” root“,从而为它们提供隐式的 控制 VM 并能够修改管理配置 适用于 Docker Desktop。runc

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

请参阅工作原理

ECI 与 Rootless Docker 有何不同?

查看工作原理