它是如何工作的?

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

启用增强的容器隔离 时,用户通过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 虚拟机中的非特权用户)。
  • 限制容器挂载敏感的虚拟机目录。
  • 检查容器和 Linux 内核之间的敏感系统调用。
  • 映射容器的用户命名空间和 Linux 虚拟机之间的文件系统用户/组 ID。
  • 在容器内模拟/proc/sys文件系统的一部分。

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

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

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

增强的容器隔离与用户命名空间重新映射

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

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

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

增强的容器隔离与无根 Docker

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

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

与无根 Docker 不同,增强的容器隔离不会在 Linux 用户命名空间中运行 Docker Engine。而是将该引擎生成的容器在用户命名空间中运行。这具有绕过 无根 Docker 的限制 的优势,并在容器和 Docker Engine 之间创建更强大的边界。

增强的容器隔离旨在确保使用 Docker Desktop 启动的容器无法轻松破坏 Docker Desktop Linux 虚拟机,从而修改其中的安全设置。