容器安全常见问题解答

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

Docker Desktop 在定制的/精简的 Linux 虚拟机(原生 Windows 容器除外)中运行所有容器。这在容器与主机机器之间添加了一层强大的隔离,即使容器以 root 用户身份运行也是如此。

然而请注意以下几点

  • 容器可以通过“设置”->“资源”->“文件共享”访问配置为共享的主机文件(有关更多信息,请参见下面的下一个常见问题解答)。

  • 默认情况下,容器在 Docker Desktop 虚拟机内部以 root 用户身份运行,但能力受限。以提升权限运行的容器(例如,带有 --privileged--pid=host--cap-add 等标志)在 Docker Desktop 虚拟机内部以提升的 root 权限运行,这使它们可以访问 Docker Desktop 虚拟机的内部,包括 Docker Engine。因此,用户必须谨慎选择以这些权限运行的容器,以避免恶意容器镜像造成安全漏洞。

  • 如果启用了增强型容器隔离 (ECI) 模式,则每个容器将在 Docker Desktop 虚拟机内部的专用 Linux 用户命名空间中运行,这意味着容器在 Docker Desktop 虚拟机内部没有任何特权。即使使用 --privileged 标志或类似标志,容器进程也仅在容器的逻辑边界内拥有特权,否则不具备特权。此外,ECI 还使用其他高级技术来确保它们不容易突破 Docker Desktop 虚拟机及其内部的 Docker Engine(更多信息请参阅 ECI 部分)。由于额外的保护是在后台添加的,因此无需更改容器或用户工作流程。

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

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

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

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

页面选项