了解 Windows 的权限要求

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

它还明确了如何运行容器,而不是在主机上拥有访问权限以及 Windows Docker 引擎和 Windows 容器的权限。rootAdministrator

权限要求

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

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

特权帮助程序

特权帮助程序是具有特权在后台运行的 Windows 服务。它侦听命名的 pipe 。开发人员运行 Docker Desktop 应用程序,该应用程序连接到命名管道并向服务发送命令。此命名管道受到保护,只有属于该组的用户才能访问它。com.docker.serviceSYSTEM//./pipe/dockerBackendV2docker-users

该服务执行以下功能:

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

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

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

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

Linux Docker 守护程序和容器在最小、专用的 Linux 中运行 由 Docker 管理的 VM。它是不可变的,因此您无法扩展它或更改 已安装的软件。这意味着,尽管容器默认以 方式运行,但这不允许更改 VM,也不授予对 Windows 主机的访问权限。Linux VM 充当安全边界 并限制可以访问主机中的资源。文件共享使用 用户空间构建的文件服务器和主机绑定挂载的任何目录 迁移到 Docker 容器中,仍保留其原始权限。它没有给出 您可以访问它尚无权访问的任何文件。rootAdministrator

增强的容器隔离

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

ECI 会自动运行 Linux 用户命名空间中的所有容器,以便 root 映射到 Docker 中的非特权用户 桌面虚拟机。ECI 使用这种技术和其他高级技术来进一步保护 容器,以便它们进一步 与 Docker 守护程序和 VM 内运行的其他服务隔离。

Windows 容器

与在 VM 中运行的 Linux Docker 引擎和容器不同,Windows 容器是一项操作系统功能,可直接在具有权限的 Windows 主机上运行。对于不希望开发人员运行 Windows 容器的组织,版本 4.11 中提供了安装程序标志来禁用它们。Administrator–no-windows-containers

联网

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