容器安全常见问题

在 Docker Desktop 中,容器是如何与主机隔离的?

Docker Desktop 在一个定制的/最小化的 Linux 虚拟机内运行所有容器(原生 Windows 容器除外)。这在容器与主机之间增加了一层强有力的隔离,即使容器以 root 权限运行也是如此。

但请注意以下内容:

  • 容器可以通过设置 -> 资源 -> 文件共享访问配置为文件共享的主机文件(更多详情请参阅下一条常见问题解答)。

  • 默认情况下,容器以 root 用户身份运行,但在 Docker Desktop 虚拟机内的权限受到限制。以提升的权限运行的容器(例如,--privileged--pid=host--cap-add 等)在 Docker Desktop 虚拟机内以具有提升权限的 root 用户身份运行,这使它们能够访问 Docker Desktop 虚拟机的内部组件,包括 Docker 引擎。因此,用户必须谨慎选择以此类权限运行的容器,以避免恶意容器镜像导致的安全漏洞。

  • 如果启用了 增强型容器隔离 (ECI) 模式,则每个容器都在 Docker Desktop VM 内的专用 Linux 用户 命名空间中运行,这意味着该容器在 Docker Desktop VM 内没有任何 特权。即使使用 --privileged 标志或类似标志,容器进程也仅在该 容器的逻辑边界内拥有特权,而在其他情况下则没有特权。此外,ECI 保护 利用其他先进技术确保它们无法轻易攻破 其中的 Docker Desktop VM 和 Docker Engine(详见 ECI 章节)。 不需要对容器或用户工作流程进行任何更改,因为 额外的保护是在后台添加的。

容器对主机文件系统的哪些部分具有读写权限?

容器只有在通过“设置”->“资源”->“文件共享”共享主机文件时才能访问这些文件, 并且仅当这些文件被绑定挂载到容器中时(例如,docker run -v /path/to/host/file:/mnt ...)。

以 root 身份运行的容器能否访问主机上管理员拥有的文件或目录?

不;主机文件共享(来自主机文件系统的绑定挂载)使用用户空间精心设计的文件服务器(以运行 Docker Desktop 的用户身份在 com.docker.backend 中运行),因此容器无法获得主机用户尚未拥有的任何访问权限。