了解 Windows 的权限要求

此页面包含有关在 Windows 上运行和安装 Docker Desktop 的权限要求、特权帮助程序进程的功能com.docker.service以及此方法背后的原因的信息。

它还提供了运行容器的清晰性,而root不是Administrator在主机上的访问权限以及 Windows Docker 引擎和 Windows 容器的特权。

权限要求

虽然 Windows 上的 Docker Desktop 可以在没有权限的情况下运行Administrator,但在安装过程中确实需要这些权限。安装时,您会收到 UAC 提示,允许安装特权帮助程序服务。之后,只要您是该docker-users组的成员,Docker Desktop 就可以在没有管理员权限的情况下运行。如果您执行了安装,您将自动添加到该组,但其他用户必须手动添加。这允许管理员控制谁有权访问 Docker Desktop。

采用这种方法的原因是 Docker Desktop 需要执行一组有限的特权操作,这些操作由特权帮助程序进程执行com.docker.service。这种方法允许遵循最小权限原则,Administrator仅将访问权限用于绝对必要的操作,同时仍然能够以非特权用户身份使用 Docker Desktop。

特权帮手

特权助手com.docker.service是一个以特权在后台运行的 Windows 服务SYSTEM。它监听命名管道//./pipe/dockerBackendV2。开发人员运行 Docker 桌面应用程序,该应用程序连接到命名管道并向服务发送命令。此命名管道受到保护,只有属于该docker-users组的用户才能访问它。

该服务执行以下功能:

  • 确保kubernetes.docker.internal在 Win32 主机文件中定义它。定义 DNS 名称kubernetes.docker.internal允许 Docker 与容器共享 Kubernetes 上下文。
  • 确保在 Win32 主机文件中定义host.docker.internal和。gateway.docker.internal它们指向主机本地 IP 地址,并允许应用程序使用主机本身或容器中的相同名称来解析主机 IP。
  • 安全缓存注册表访问管理策略,该策略对开发人​​员来说是只读的。
  • 创建 Hyper-V VM"DockerDesktopVM"并管理其生命周期 - 启动、停止和销毁它。 VM 名称硬编码在服务代码中,因此该服务不能用于创建或操作任何其他 VM。
  • 移动 VHDX 文件或文件夹。
  • 启动和停止Windows Docker引擎并查询其是否正在运行。
  • 删除所有 Windows 容器数据文件。
  • 检查 Hyper-V 是否已启用。
  • 检查引导加载程序是否激活 Hyper-V。
  • 检查所需的 Windows 功能是否已安装并启用。
  • 进行健康检查并检索服务本身的版本。

服务启动模式取决于选择哪个容器引擎,对于WSL来说,取决于是否需要维护host.docker.internalgateway.docker.internal在Win32主机文件中。这是由Use the WSL 2 based engine设置页面下的设置控制的。设置此选项后,WSL 引擎的行为与 Hyper-V 相同。所以:

  • 对于 Windows 容器或 Hyper-v Linux 容器,该服务会在系统启动时启动并始终运行,即使 Docker Desktop 未运行时也是如此。这是必需的,这样您就可以在没有管理员权限的情况下启动 Docker Desktop。
  • 对于 WSL2 Linux 容器,该服务不是必需的,因此在系统启动时不会自动运行。当您切换到Windows容器或Hyper-V Linux容器,或者选择在Win32主机文件中维护host.docker.internal和时gateway.docker.internal,会显示UAC提示,要求您接受特权操作来启动服务。如果接受,该服务将启动并设置为在下次 Windows 启动时自动启动。

在 Linux VM 中以 root 身份运行的容器

Linux Docker 守护进程和容器在由 Docker 管理的最小专用 Linux VM 中运行。它是不可变的,因此您无法扩展它或更改已安装的软件。这意味着虽然容器默认运行为 root,但这不允许更改虚拟机,也不允许Administrator 访问 Windows 主机。 Linux VM 充当安全边界并限制可以访问主机的资源。文件共享使用用户空间制作的文件服务器,并且安装到 Docker 容器中的主机绑定中的任何目录仍保留其原始权限。它不会让您访问它尚未访问的任何文件。

增强容器隔离

此外,Docker Desktop 支持 增强型容器隔离模式(ECI),仅适用于企业客户,从而进一步保护容器,而不影响开发人员工作流程。

ECI 自动运行 Linux 用户命名空间内的所有容器,以便容器中的根映射到 Docker Desktop VM 内的非特权用户。 ECI 使用此技术和其他先进技术来进一步保护 Docker Desktop Linux VM 中的容器,以便它们进一步与 Docker 守护程序和 VM 内运行的其他服务隔离。

Windows容器

与在虚拟机中运行的 Linux Docker 引擎和容器不同,Windows 容器是一种操作系统功能,并以Administrator特权直接在 Windows 主机上运行。对于不希望其开发人员运行 Windows 容器的组织,–no-windows-containers可以从版本 4.11 开始使用安装程序标志来禁用它们的使用。

联网

对于网络连接,Docker Desktop 使用用户空间进程 ( vpnkit),该进程从启动它的用户继承防火墙规则、VPN、HTTP 代理属性等约束。