增强型容器隔离常见问题解答
启用 ECI 后,我是否需要更改使用 Docker 的方式?
不需要,您可以像往常一样继续使用 Docker。ECI 在后台通过创建更安全的容器来工作。
所有容器工作负载都能在 ECI 上运行良好吗?
绝大多数容器工作负载在启用 ECI 的情况下运行良好,但也有少数(目前)无法运行。对于那些尚无法与增强型容器隔离配合使用的工作负载,Docker 正在不断改进该功能,以将此类情况降至最低。
我可以在 ECI 中运行特权容器吗?
是的,您可以在容器中使用 --privileged 标志,但与不具备 ECI 的特权容器不同,该容器只能使用其提升的权限来访问分配给该容器的资源。它无法访问 Docker Desktop Linux VM 中的全局内核资源。这使您能够安全地运行特权容器(包括 Docker-in-Docker)。欲了解更多信息,请参阅
主要功能和优势。
所有特权容器工作负载是否都将在 ECI 中运行?
不行。希望访问 Docker Desktop Linux 虚拟机内全局内核资源的特权容器工作负载将无法工作。例如,您不能使用特权容器来加载内核模块。
为什么不直接限制 --privileged 标志的使用?
特权容器通常用于在容器中运行高级工作负载,例如 Docker-in-Docker 或 Kubernetes-in-Docker,以执行内核操作(如加载模块)或访问硬件设备。
ECI 允许运行高级工作负载,但禁止执行内核操作或访问硬件设备。
ECI 是否限制容器内的绑定挂载?
是的,它限制将位于 Docker Desktop Linux 虚拟机中的目录绑定挂载到容器中。
它不会限制将主机文件绑定挂载到容器中, 该挂载通过 Docker Desktop 的 设置 > 资源 > 文件共享 进行配置。
启用 ECI 后,我可以将宿主机的 Docker Socket 挂载到容器中吗?
出于安全原因,ECI 默认阻止将宿主机的 Docker 套接字绑定挂载到容器中。但是,也存在合理的使用场景,例如使用 Testcontainers 进行本地测试。
为了支持此类用例,可以将 ECI 配置为允许 Docker 套接字挂载到容器中,但仅限于您选择的(即受信任的)容器镜像,甚至可以限制容器通过套接字向 Docker Engine 发送的命令。请参阅 ECI Docker 套接字挂载权限。
ECI 是否保护所有使用 Docker Desktop 启动的容器?
还没有。它保护用户通过 docker create 和
docker run 启动的所有容器。
在 Docker Desktop 4.30 之前,它不会保护由 docker build 隐式使用的容器(使用 docker 构建驱动程序,即默认驱动程序)。从 Docker Desktop 4.30 开始,它会保护此类容器,但 WSL 2(Windows 主机)上的 Docker Desktop 除外。
请注意,当使用 docker-container 构建驱动程序时,ECI 始终保护由 docker build 使用的容器,自 Docker Desktop 4.19 起,在所有支持的平台上(Windows 配合 WSL 2 或 Hyper-V、Mac 和 Linux)。
ECI 尚未保护 Docker Desktop Kubernetes pod、Extension 容器以及 Dev Environments 容器。
ECI 是否保护在启用 ECI 之前启动的容器?
否。开启 ECI 之前创建的容器不受保护。因此,建议您在开启 ECI 之前移除所有容器。
ECI 是否会影响容器性能?
ECI 对容器的性能影响很小。例外情况是那些执行大量 mount 和 umount 系统调用的容器,因为这些调用会被 Sysbox 容器运行时捕获和审查,以确保它们未被用于破坏容器的文件系统。
使用 ECI,用户是否仍可以从 CLI 覆盖 --runtime 标志?
不行。启用 ECI 后,Sysbox 被设置为 Docker Desktop 用户部署容器的默认(且唯一的)运行时。如果用户试图覆盖运行时(例如,docker run --runtime=runc),该请求将被忽略,并且容器将通过 Sysbox 运行时创建。
禁止使用 runc 的原因是,它允许用户在 Docker Desktop Linux 虚拟机上以“真正的 root”身份运行,从而为他们提供了对虚拟机的隐式控制权,以及修改 Docker Desktop 管理配置的能力。
ECI 与 Docker Engine 的 userns-remap 模式有何不同?
查看 它是如何工作的。
ECI 与 Rootless Docker 有何区别?
查看 它是如何工作的