强制 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)

注意

配置配置文件方法处于抢先体验版,可在 Docker Desktop 4.36 及更高版本中使用。

配置配置文件是 macOS 的一项功能,允许您将配置信息分发到您管理的 Mac。这是在 macOS 上强制执行登录的最佳方法,因为已安装的配置配置文件受 Apple 的系统完整性保护 (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. 使用 Jamf 或 Fleet 等 MDM 工具将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 版及更早版本中,如果您添加多个组织,则登录强制执行将静默失败。


更多资源