如何工作?
Docker 通过使用 Sysbox 容器运行时 实现增强容器隔离。Sysbox 是标准 OCI runc 运行时的分支,经过修改以增强标准容器隔离和工作负载。有关更多详细信息,请参阅幕后原理。
启用增强容器隔离后,用户通过 docker run
或 docker create
创建的容器将自动使用 Sysbox 启动,而不是标准 OCI runc 运行时。用户无需执行其他操作,可以像往常一样继续使用容器。例外情况请参阅常见问题解答。
即使是使用不安全的 --privileged
标志的容器,现在也可以通过增强容器隔离安全运行,这样它们就不能再用于破坏 Docker Desktop 虚拟机 (VM) 或其他容器。
注意
在 Docker Desktop 中启用增强容器隔离后,Docker CLI 的
--runtime
标志将被忽略。Docker 的默认运行时仍然是runc
,但所有用户容器都会隐式地通过 Sysbox 启动。
增强容器隔离与Docker Engine 的 userns-remap 模式或 Rootless Docker 不同。
幕后原理
Sysbox 通过使用以下技术增强容器隔离:
- 在所有容器上启用 Linux 用户命名空间(容器中的 root 用户映射到 Linux VM 中的非特权用户)。
- 限制容器挂载敏感的 VM 目录。
- 审查容器和 Linux 内核之间的敏感系统调用。
- 在容器的用户命名空间和 Linux VM 之间映射文件系统用户/组 ID。
- 在容器内部模拟部分
/proc
和/sys
文件系统。
其中一些得益于 Linux 内核的最新进展,Docker Desktop 现已集成这些进展。Sysbox 应用这些技术对容器的功能或性能影响最小。
这些技术补充了 Docker 传统的容器安全机制,例如使用其他 Linux 命名空间、cgroups、受限 Linux Capabilities、Seccomp 和 AppArmor。它们在容器和 Docker Desktop VM 内部的 Linux 内核之间增加了强大的隔离层。
有关更多信息,请参阅主要特性和优势。
增强容器隔离与用户命名空间重映射的比较
Docker Engine 包含一个名为userns-remap 模式的功能,可以在所有容器中启用用户命名空间。但它存在一些限制,并且在 Docker Desktop 中不受支持。
Userns-remap 模式与增强容器隔离类似,两者都通过利用 Linux 用户命名空间来改善容器隔离。
然而,增强容器隔离更为先进,因为它会自动为每个容器分配独占的用户命名空间映射,并增加了其他一些旨在为具有严格安全要求的组织加固 Docker Desktop 的容器隔离功能。
增强容器隔离与 Rootless Docker 的比较
Rootless Docker 允许 Docker Engine 以及扩展的容器在 Linux 主机上原生无 root 权限运行。这使得非 root 用户可以在 Linux 上原生安装和运行 Docker。
Docker Desktop 中不支持 Rootless Docker。尽管它在 Linux 上原生运行 Docker 时是一个有价值的功能,但其在 Docker Desktop 中的价值有所降低,因为 Docker Desktop 在 Linux VM 中运行 Docker Engine。也就是说,Docker Desktop 已经允许非 root 主机用户运行 Docker,并使用虚拟机将 Docker Engine 与主机隔离开来。
与 Rootless Docker 不同,增强容器隔离不在 Linux 用户命名空间内运行 Docker Engine。它是在用户命名空间内运行由该 Engine 生成的容器。这样做的好处是绕过了 Rootless Docker 的限制,并在容器和 Docker Engine 之间创建了更强的边界。
增强容器隔离旨在确保通过 Docker Desktop 启动的容器不易突破 Docker Desktop Linux VM,从而无法修改其中的安全设置。