强制 Docker Desktop 登录的方式

本页面介绍了为 Docker Desktop 强制执行登录的几种不同方法。

注册表键方法(仅限 Windows)

注意

注册表密钥方法适用于 Docker Desktop 4.32 及更高版本。

为在 Windows 上对 Docker Desktop 强制执行登录,您可以配置一个注册表项,以指定您组织中允许使用的用户。以下步骤将引导您完成创建并部署该注册表项以实施此策略的过程:

  1. 创建注册表项。您的新注册表项应如下所示:

    $ HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Docker\Docker Desktop
    
  2. 创建一个多字符串值 allowedOrgs

    重要

    从 Docker Desktop 4.36 版本及更高版本起,您可以添加多个组织。而在 Docker Desktop 4.35 版本及更早版本中,若添加多个组织,登录强制策略将静默失败。

  3. 使用您组织的名称,全部小写,作为字符串数据。

  4. 重启 Docker Desktop。

  5. 当 Docker Desktop 重启后,请确认 需要登录! 提示是否出现。

在某些情况下,可能需要重启系统才能使强制生效。

注意

如果注册表项和 registry.json 文件同时存在,则注册表项优先。

通过组策略进行示例部署

以下示例概述了如何部署注册表项,以通过组策略在 Docker Desktop 中强制启用登录功能。根据您组织的基础设施、安全策略和管理工具,有多种方式可以部署此配置。

  1. 创建注册表脚本。编写一个脚本来创建 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Docker\Docker Desktop 键,添加 allowedOrgs 多字符串值,然后将其值设置为您的组织名称。
  2. 在组策略中,创建或编辑一个应用于目标计算机或用户的组策略对象(GPO)。
  3. 在组策略对象(GPO)中,导航至 计算机配置 并选择 首选项
  4. 选择 Windows 设置,然后选择 注册表
  5. 要添加注册表项,请右键单击注册表节点,选择新建,然后选择注册表项
  6. 配置新的注册表项以匹配您创建的注册表脚本,将操作指定为 更新。请确保输入正确的路径、值名称(allowedOrgs)和值数据(您的组织名称)。
  7. 将组策略对象(GPO)链接到包含要应用此设置的计算机的组织单位(OU)。
  8. 首先在少量计算机上测试GPO,以确保其行为符合预期。您可以在测试计算机上使用gpupdate /force命令手动刷新组策略设置,并检查注册表以确认更改是否生效。
  9. 一旦验证通过,即可进行更广泛的部署。请监控部署过程,以确保设置能正确应用于组织内所有计算机。

配置文件方法(仅限 Mac)

注意

配置文件方法位于 预览版(Early Access) ,适用于 Docker Desktop 4.36 及更高版本。

配置文件是 macOS 的一项功能,可用于向您管理的 Mac 计算机分发配置信息。这是强制 macOS 登录的最安全方法,因为安装的配置文件受到苹果系统完整性保护(SIP)的保护,因此用户无法对其进行篡改。

  1. 将以下 XML 文件保存为扩展名 .mobileconfig,例如 docker.mobileconfig

     <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     <plist version="1.0">
       <dict>
         <key>PayloadContent</key>
         <array>
           <dict>
             <key>PayloadType</key>
             <string>com.docker.config</string>
             <key>PayloadVersion</key>
             <integer>1</integer>
             <key>PayloadIdentifier</key>
             <string>com.docker.config</string>
             <key>PayloadUUID</key>
             <string>eed295b0-a650-40b0-9dda-90efb12be3c7</string>
             <key>PayloadDisplayName</key>
             <string>Docker Desktop Configuration</string>
             <key>PayloadDescription</key>
             <string>Configuration profile to manage Docker Desktop settings.</string>
             <key>PayloadOrganization</key>
             <string>Your Company Name</string>
             <key>allowedOrgs</key>
             <string>first_org;second_org</string>
           </dict>
         </array>
         <key>PayloadType</key>
         <string>Configuration</string>
         <key>PayloadVersion</key>
         <integer>1</integer>
         <key>PayloadIdentifier</key>
         <string>com.yourcompany.docker.config</string>
         <key>PayloadUUID</key>
         <string>0deedb64-7dc9-46e5-b6bf-69d64a9561ce</string>
         <key>PayloadDisplayName</key>
         <string>Docker Desktop Config Profile</string>
         <key>PayloadDescription</key>
         <string>Config profile to enforce Docker Desktop settings for allowed organizations.</string>
         <key>PayloadOrganization</key>
         <string>Your Company Name</string>
       </dict>
     </plist>
  2. 将占位符 com.yourcompany.docker.configYour Company Name 替换为贵公司的名称。

  3. 添加您的组织名称。允许的组织名称存储在 allowedOrgs 属性中。该属性可以包含单个组织的名称,或用分号分隔的多个组织名称列表:

             <key>allowedOrgs</key>
             <string>first_org;second_org</string>
  4. 使用移动设备管理(MDM)解决方案将您修改后的 .mobileconfig 文件分发给您的 macOS 客户端。

plist 方法(仅限 Mac)

注意

plist 方法适用于 Docker Desktop 4.32 及更高版本。

为在 macOS 上强制要求 Docker Desktop 登录,您可以使用一个 plist 文件来定义所需设置。以下步骤将引导您完成创建并部署必要的 plist 文件以实施该策略的过程:

  1. 创建文件 /Library/Application Support/com.docker.docker/desktop.plist

  2. 在文本编辑器中打开 desktop.plist,并添加以下内容,其中 myorg 替换为您的组织名称(全部小写):

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
      <dict>
          <key>allowedOrgs</key>
          <array>
              <string>myorg1</string>
              <string>myorg2</string>
          </array>
      </dict>
    </plist>

    重要

    从 Docker Desktop 4.36 版本开始,您可以添加多个组织。在 Docker Desktop 4.35 及更早版本中,如果您添加多个组织,登录强制生效功能将静默失败。

  3. 修改文件权限,确保该文件不能被任何非管理员用户编辑。

  4. 重启 Docker Desktop。

  5. 当 Docker Desktop 重启后,请确认 需要登录! 提示是否出现。

注意

如果 plistregistry.json 文件同时存在,则 plist 文件具有更高优先级。

示例部署

以下示例介绍了如何创建并分发 plist 文件,以在 Docker Desktop 中强制要求用户登录。根据您组织的基础设施、安全策略及管理工具的不同,部署此配置的方式有多种。


  1. 按照之前说明的步骤创建 desktop.plist 文件。
  2. 使用 MDM 工具(如 Jamf 或 Fleet)将 desktop.plist 文件分发到目标 macOS 设备上的 /Library/Application Support/com.docker.docker/
  3. 通过MDM工具,将文件权限设置为仅允许管理员编辑。
  1. 创建一个 Bash 脚本,用于检查 .plist 文件是否存在于正确目录中,按需创建或修改该文件,并设置相应的权限。在脚本中包含以下命令以:
    • 导航到 /Library/Application Support/com.docker.docker/ 目录,如果该目录不存在则创建它。
    • 使用 defaults 命令将所需的键和值写入 desktop.plist 文件。例如:
      $ defaults write /Library/Application\ Support/com.docker.docker/desktop.plist allowedOrgs -string "myorg"
      
    • 更改 plist 文件的权限以限制编辑,使用 chmod 并可能使用 chown 将所有者设置为 root 或其他管理员帐户,确保其不会被未经授权的用户轻易修改。
  2. 在组织范围内部署脚本之前,请在本地 macOS 机器上进行测试,以确保其行为符合预期。请特别注意目录路径、权限以及 plist 设置的成功应用。
  3. 确保您具备在 macOS 设备上远程执行脚本的能力。这可能涉及设置 SSH 访问或使用支持 macOS 的远程支持工具。
  4. 使用一种适合您组织基础设施的远程脚本执行方法。选项包括:
    • SSH:如果目标机器上启用了 SSH,您可以使用它在远程执行脚本。此方法需要知道设备的 IP 地址并拥有相应的凭据。
    • 远程支持工具:对于使用远程支持工具的组织,您可以将脚本添加到任务中,并在所有选定的机器上执行。
  5. 确保脚本在所有目标设备上按预期运行。您可能需要检查日志文件或在脚本本身中实现日志记录,以报告其成功或失败。

registry.json 方法(全部)

以下说明解释了如何创建 registry.json 文件并将其部署到单个设备。部署 registry.json 文件的方法有很多。您可以按照 .plist 文件部分中概述的示例部署进行操作。您选择的方法取决于您组织的基础设施、安全策略以及最终用户的管理权限。

选项 1:创建一个 registry.json 文件以强制要求登录

  1. 确保用户是您组织中 Docker 的成员。欲了解更多详情,请参阅 管理成员

  2. 创建 registry.json 文件。

    根据用户的操作系统,在以下位置创建一个名为 registry.json 的文件,并确保该文件无法被用户编辑。

    平台位置
    Windows/ProgramData/DockerDesktop/registry.json
    Mac/Library/Application Support/com.docker.docker/registry.json
    Linux/usr/share/docker-desktop/registry/registry.json
  3. registry.json 文件中指定您的组织。

    打开文本编辑器中的 registry.json 文件并添加以下内容,其中 myorg 替换为您的组织名称。文件内容区分大小写,并且您必须为组织名称使用小写字母。

    {
    "allowedOrgs": ["myorg1", "myorg2"]
    }

    重要

    从 Docker Desktop 4.36 版本及更高版本起,您可以添加多个组织。而在 Docker Desktop 4.35 版本及更早版本中,若添加多个组织,登录强制策略将静默失败。

  4. 验证是否强制登录。

    要激活 registry.json 文件,请在用户机器上重启 Docker Desktop。当 Docker Desktop 启动时,验证是否出现 需要登录! 提示。

    在某些情况下,可能需要重新启动系统才能使强制措施生效。

    提示

    如果您在强制登录后,用户在启动 Docker Desktop 时遇到问题,他们可能需要更新到最新版本。

选项 2:安装 Docker Desktop 时创建 registry.json 文件

要在安装 Docker Desktop 时创建 registry.json 文件,请根据用户的操作系统使用以下说明。


要在安装 Docker Desktop 时自动创建 registry.json 文件, 请下载 Docker Desktop Installer.exe 并从包含 Docker Desktop Installer.exe 的目录中运行以下命令之一。 将 myorg 替换为您的组织名称。 您的组织名称必须使用小写字母。

如果您正在使用 PowerShell:

PS> Start-Process '.\Docker Desktop Installer.exe' -Wait 'install --allowed-org=myorg'

如果您正在使用 Windows 命令提示符:

C:\Users\Admin> "Docker Desktop Installer.exe" install --allowed-org=myorg

重要

从 Docker Desktop 4.36 及更高版本开始,您可以在单个 registry.json 文件中添加多个组织。在 Docker Desktop 4.35 及更早版本中,如果添加多个组织,登录强制执行将静默失败。

要在安装 Docker Desktop 时自动创建 registry.json 文件,请下载 Docker.dmg 并在包含 Docker.dmg 的目录中,于终端运行以下命令。将 myorg 替换为您的组织名称。组织名称必须使用小写字母。

$ sudo hdiutil attach Docker.dmg
$ sudo /Volumes/Docker/Docker.app/Contents/MacOS/install --allowed-org=myorg
$ sudo hdiutil detach /Volumes/Docker

选项 3:使用命令行创建 registry.json 文件

要使用命令行创建 registry.json,请根据用户的操作系统使用以下说明。


要使用 CLI 创建 registry.json 文件,请以管理员身份运行以下 PowerShell 命令,并将 myorg 替换为您的组织名称。文件内容区分大小写,您必须为组织名称使用小写字母。

PS>  Set-Content /ProgramData/DockerDesktop/registry.json '{"allowedOrgs":["myorg"]}'

这将在 C:\ProgramData\DockerDesktop\registry.json 创建 registry.json 文件,并包含用户所属的组织信息。请确保用户无法编辑此文件,只有管理员可以:

PS C:\ProgramData\DockerDesktop> Get-Acl .\registry.json


    Directory: C:\ProgramData\DockerDesktop


Path          Owner                  Access
----          -----                  ------
registry.json BUILTIN\Administrators NT AUTHORITY\SYSTEM Allow  FullControl...

重要

从 Docker Desktop 4.36 及更高版本开始,您可以在单个 registry.json 文件中添加多个组织。在 Docker Desktop 4.35 及更早版本中,如果添加多个组织,登录强制执行将静默失败。

要使用 CLI 创建 registry.json 文件,请在终端中运行以下命令,并将 myorg 替换为您的组织名称。文件内容区分大小写,您必须为组织名称使用小写字母。

$ sudo mkdir -p "/Library/Application Support/com.docker.docker"
$ echo '{"allowedOrgs":["myorg"]}' | sudo tee "/Library/Application Support/com.docker.docker/registry.json"

这将在 /Library/Application Support/com.docker.docker/registry.json 创建(如果文件已存在,则更新)registry.json 文件, 并包含用户所属的组织信息。请确保文件具有 预期内容,并且用户无法编辑此文件,只有管理员才能编辑。

验证文件内容是否包含正确信息:

$ sudo cat "/Library/Application Support/com.docker.docker/registry.json"
{"allowedOrgs":["myorg"]}

验证文件是否具有预期的权限(-rw-r--r--)和所有权 (rootadmin):

$ sudo ls -l "/Library/Application Support/com.docker.docker/registry.json"
-rw-r--r--  1 root  admin  26 Jul 27 22:01 /Library/Application Support/com.docker.docker/registry.json

重要

从 Docker Desktop 4.36 及更高版本开始,您可以在单个 registry.json 文件中添加多个组织。在 Docker Desktop 4.35 及更早版本中,如果添加多个组织,登录强制执行将静默失败。

要使用 CLI 创建 registry.json 文件,请在终端中运行以下命令,并将 myorg 替换为您的组织名称。文件内容区分大小写,您必须为组织名称使用小写字母。

$ sudo mkdir -p /usr/share/docker-desktop/registry
$ echo '{"allowedOrgs":["myorg"]}' | sudo tee /usr/share/docker-desktop/registry/registry.json

这将在 /usr/share/docker-desktop/registry/registry.json 创建(如果文件已存在则更新)registry.json 文件,并包含用户所属的组织信息。请确保文件内容符合预期,并且用户无法编辑此文件,只有 root 用户可以编辑。

验证文件内容是否包含正确信息:

$ sudo cat /usr/share/docker-desktop/registry/registry.json
{"allowedOrgs":["myorg"]}

验证文件具有预期的权限 (-rw-r--r--) 和所有权 (root):

$ sudo ls -l /usr/share/docker-desktop/registry/registry.json
-rw-r--r--  1 root  root  26 Jul 27 22:01 /usr/share/docker-desktop/registry/registry.json

重要

从 Docker Desktop 4.36 及更高版本开始,您可以在单个 registry.json 文件中添加多个组织。在 Docker Desktop 4.35 及更早版本中,如果添加多个组织,登录强制执行将静默失败。


更多资源