它是如何工作的?

Docker 通过使用 Sysbox 容器运行时 来实现增强型容器隔离。Sysbox 是标准 OCI runc 运行时的分支,经过修改以增强标准容器隔离和工作负载。有关更多详细信息,请参阅 幕后

从 4.13 版开始,Docker Desktop 包括 Sysbox 的自定义版本。

启用增强型容器隔离 时,用户通过 docker rundocker create 创建的容器将自动使用 Sysbox 启动,而不是使用标准的 OCI runc 运行时。用户无需执行任何其他操作,可以像往常一样继续使用容器。有关例外情况,请参阅 常见问题解答

即使是使用不安全的 --privileged 标志的容器现在也可以使用增强型容器隔离安全运行,因此它们无法再用于突破 Docker Desktop 虚拟机 (VM) 或其他容器。

注意

在 Docker Desktop 中启用增强型容器隔离时,将忽略 Docker CLI 的“--runtime”标志。Docker 的默认运行时仍为“runc”,但所有用户容器都将隐式使用 Sysbox 启动。

增强型容器隔离与 Docker Engine 的 userns-remap 模式或无根 Docker 不同。这将在下面进一步解释。

幕后

Sysbox 通过使用以下技术增强容器隔离

  • 在所有容器上启用 Linux 用户命名空间(容器中的 root 用户映射到 Linux VM 中的非特权用户)。
  • 限制容器挂载敏感的 VM 目录。
  • 验证容器和 Linux 内核之间的敏感系统调用。
  • 在容器的用户命名空间和 Linux VM 之间映射文件系统用户/组 ID。
  • 在容器内模拟 procfs 和 sysfs 文件系统的一部分。

其中一些是通过 Docker Desktop 现在已合并的 Linux 内核的最新进展实现的。Sysbox 应用这些技术,对容器的功能或性能影响最小。

这些技术补充了 Docker 的传统容器安全机制,例如使用其他 Linux 命名空间、cgroups、受限制的 Linux 功能、seccomp 和 AppArmor。它们在 Docker Desktop VM 中的容器和 Linux 内核之间添加了一层强大的隔离层。

有关更多信息,请参阅 主要功能和优势

增强型容器隔离与 Docker Userns-Remap 模式

Docker Engine 包含一项名为 userns-remap 模式 的功能,该功能可在所有容器中启用用户命名空间。但是它有一些 局限性,并且在 Docker Desktop 中不受支持。

Userns-remap 模式与增强型容器隔离类似,因为两者都通过利用 Linux 用户命名空间来提高容器隔离。

但是,增强型容器隔离更加先进,因为它会自动为每个容器分配专用的用户命名空间映射,并添加其他几个 容器隔离功能 ,旨在保护具有严格安全要求的组织中的 Docker Desktop。

增强型容器隔离与无根 Docker

无根 Docker 允许 Docker Engine 以及扩展的容器在 Linux 主机上原生运行,而无需 root 权限。这允许非 root 用户在 Linux 上原生安装和运行 Docker。

无根 Docker 在 Docker Desktop 中不受支持。虽然它在 Linux 上原生运行 Docker 时是一项有价值的功能,但在 Docker Desktop 中,它的价值降低了,因为 Docker Desktop 在 Linux VM 中运行 Docker Engine。也就是说,Docker Desktop 已经允许非 root 主机用户运行 Docker,并使用虚拟机将 Docker Engine 与主机隔离开来。

与无根 Docker 不同,增强型容器隔离不会在 Linux 用户命名空间中运行 Docker Engine。相反,它在用户命名空间中运行该引擎生成的容器。这样做的优点是可以绕过 无根 Docker 的局限性,并在容器和 Docker Engine 之间创建更强的边界。

增强型容器隔离旨在确保使用 Docker Desktop 启动的容器无法轻松突破 Docker Desktop Linux VM,因此无法修改其中的安全设置。