注册表访问管理
注意
注册表访问管理仅适用于Docker Business 客户。
通过注册表访问管理 (RAM),管理员可以确保使用 Docker Desktop 的开发者只能访问允许的注册表。这可以通过 Docker Hub 中的注册表访问管理仪表板或 Docker 管理员控制台完成。
注册表访问管理支持云和本地注册表。此功能在 DNS 级别运行,因此与所有注册表兼容。您可以添加任何您想包含在允许的注册表列表中的主机名或域名。但是,如果注册表重定向到其他域名,例如 `s3.amazon.com`,则必须将这些域名添加到列表中。
管理员可以允许的示例注册表包括:
- Docker Hub。默认情况下启用。
- Amazon ECR
- GitHub 容器注册表
- Google 容器注册表
- GitLab 容器注册表
- Nexus
- Artifactory
前提条件
您需要强制登录。为了使注册表访问管理生效,Docker Desktop 用户必须向您的组织进行身份验证。强制登录可确保您的 Docker Desktop 开发人员始终向您的组织进行身份验证,即使他们可以无需身份验证即可进行身份验证,并且此功能也将生效。强制登录可保证此功能始终生效。
配置注册表访问管理权限
要配置注册表访问管理权限,请执行以下步骤:
登录Docker Hub。
选择**组织**、您的组织、**设置**,然后选择**注册表访问**。
启用注册表访问管理以设置注册表的权限。
注意
启用后,Docker Hub 注册表默认设置,但是您也可以限制开发人员对此注册表的访问。
选择**添加注册表**,在相应的字段中输入您的注册表详细信息,然后选择**创建**将注册表添加到您的列表中。您可以添加的注册表数量没有限制。
验证注册表是否出现在您的列表中,然后选择**保存更改**。
添加注册表后,更改可能需要最多 24 小时才能在开发人员的机器上强制执行。
如果要更快地应用更改,则必须强制在开发人员的机器上注销 Docker,并让开发人员重新验证 Docker Desktop 的身份。请参阅下面的警告部分,了解使用此功能时的限制。
重要
从 Docker Desktop 4.36 版本开始,您可以强制执行多个组织的登录。如果开发人员属于多个具有不同 RAM 策略的组织,则只强制执行 `registry.json` 文件、`.plist` 文件或注册表键中列出的第一个组织的 RAM 策略。
提示
由于 RAM 设置了关于内容可以从何处获取的策略,因此当 Dockerfile 的 `ADD` 指令的参数是 URL 时,`ADD` 指令也受注册表限制。建议您将 URL 参数的域名添加到组织的注册表访问管理设置下的允许注册表地址列表中。
要配置注册表访问管理权限,请执行以下步骤:
登录管理控制台。
在左侧导航下拉菜单中选择您的组织,然后选择注册表访问。
启用注册表访问管理以设置注册表的权限。
注意
启用后,Docker Hub 注册表默认设置,但是您也可以限制开发人员对此注册表的访问。
选择**添加注册表**,在相应的字段中输入您的注册表详细信息,然后选择**创建**将注册表添加到您的列表中。您可以添加的注册表数量没有限制。
验证注册表是否出现在您的列表中,然后选择**保存更改**。
添加注册表后,更改可能需要最多 24 小时才能在开发人员的机器上强制执行。
如果要更快地应用更改,则必须强制在开发人员的机器上注销 Docker,并让开发人员重新验证 Docker Desktop 的身份。请参阅下面的警告部分,了解使用此功能时的限制。
重要
从 Docker Desktop 4.36 版本开始,您可以强制执行多个组织的登录。如果开发人员属于多个具有不同 RAM 策略的组织,则只强制执行 `registry.json` 文件、`.plist` 文件或注册表键中列出的第一个组织的 RAM 策略。
提示
由于 RAM 设置了关于内容可以从何处获取的策略,因此当 Dockerfile 的 `ADD` 指令的参数是 URL 时,`ADD` 指令也受注册表限制。建议您将 URL 参数的域名添加到组织的注册表访问管理设置下的允许注册表地址列表中。
验证限制
开发人员使用其组织凭据成功验证 Docker Desktop 后,新的注册表访问管理策略生效。如果开发人员尝试通过 Docker CLI 从不允许的注册表拉取镜像,他们会收到一条错误消息,指出该组织不允许此注册表。
警告
使用注册表访问管理时存在某些限制。
- 默认情况下,Windows 镜像拉取和镜像构建不受限制。要使注册表访问管理对 Windows 容器模式生效,您必须允许 Windows Docker 守护程序使用 Docker Desktop 的内部代理,方法是选择为 Windows Docker 守护程序使用代理设置。
- 使用 Kubernetes 驱动程序的构建(例如 `docker buildx`)不受限制。
- 使用自定义 docker-container 驱动程序的构建(例如 `docker buildx`)不受限制。
- 阻止是基于 DNS 的;您必须使用注册表的访问控制机制来区分“推送”和“拉取”。
- WSL 2 需要至少 5.4 系列 Linux 内核(这不适用于更早的 Linux 内核系列)。
- 在 WSL 2 网络下,所有 Linux 发行版的流量都受到限制(这将在更新的 5.15 系列 Linux 内核中解决)。
- 启用 Docker 调试或 Kubernetes 时,Docker Desktop 拉取的镜像默认情况下不受限制,即使 Docker Hub 被 RAM 阻止。
此外,注册表访问管理在主机级别运行,而不是 IP 地址级别。开发人员可以在其域名解析中绕过此限制,例如通过针对本地代理运行 Docker 或修改其操作系统的 `sts` 文件。阻止这些类型的操作超出了 Docker Desktop 的范围。