它是如何工作的?
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 引擎的 userns-remap 模式或无根 Docker。
底层原理
Sysbox 通过使用以下技术增强了容器隔离性:
- 在所有容器上启用 Linux 用户命名空间(容器中的 root 用户映射到 Linux 虚拟机中的非特权用户)。
- 限制容器挂载敏感的虚拟机目录。
- 审查容器与 Linux 内核之间的敏感系统调用。
- 在容器的用户命名空间和 Linux 虚拟机之间映射文件系统用户/组 ID。
- 在容器内模拟
/proc和/sys文件系统的部分内容。
其中一些得益于 Linux 内核的最新进展,Docker Desktop 现已整合了这些进展。Sysbox 应用这些技术,对容器的功能或性能影响微乎其微。
这些技术补充了 Docker 的传统容器安全机制,例如使用其他 Linux 命名空间、cgroups、受限的 Linux Capabilities、Seccomp 和 AppArmor。它们在容器与 Docker Desktop VM 内部的 Linux 内核之间增加了一层强有力的隔离。
欲了解更多信息,请参阅 主要功能和优势。
增强型容器隔离与用户命名空间重映射
Docker 引擎包含一个名为 userns-remap 模式 的功能,该功能在所有容器中启用用户命名空间。然而,它存在一些 限制,并且 Docker Desktop 不支持该功能。
Userns-remap 模式与增强容器隔离类似,两者都通过利用 Linux 用户命名空间来提高容器隔离性。
然而,增强型容器隔离技术更为先进,因为它会自动为每个容器分配专用的用户命名空间映射,并添加了多项其他容器隔离功能,旨在为具有严格安全要求的组织保护 Docker Desktop。
增强型容器隔离与无根 Docker 对比
Rootless Docker 让 Docker 引擎以及容器能够在 Linux 主机上以非 root 权限原生运行。这使得非 root 用户可以在 Linux 上原生安装和运行 Docker。
Docker Desktop 不支持 Rootless Docker。虽然在 Linux 上原生运行 Docker 时,这是一个很有价值的功能,但在 Docker Desktop 中,其价值有所降低,因为 Docker Desktop 是在 Linux 虚拟机中运行 Docker 引擎的。也就是说,Docker Desktop 已经允许非 root 主机用户运行 Docker,并通过虚拟机将 Docker 引擎与主机隔离。
与 Rootless Docker 不同,增强型容器隔离并不是在 Linux 用户命名空间内运行 Docker 引擎。而是在用户命名空间内运行该引擎生成的容器。这样做的好处是规避了 Rootless Docker 的局限性,并在容器和 Docker 引擎之间建立了更强的边界。
增强型容器隔离旨在确保使用 Docker Desktop 启动的容器无法轻易突破 Docker Desktop Linux 虚拟机,进而修改其中的安全设置。