注册表访问管理
注意
注册表访问管理仅适用于 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 注册表会被设为默认值,但您也可以为您的开发者限制此注册表。
选择 添加注册表 并在相应字段中输入您的注册表详细信息,然后选择 创建 将注册表添加到您的列表中。您可以添加的注册表数量没有限制。
验证注册表是否出现在您的列表中,然后选择Save changes。
添加注册表后,可能需要长达 24 小时才能在开发人员的机器上强制执行更改。
如果您希望更快地应用更改,您必须在开发者的机器上强制退出 Docker 登录,并让开发者重新对 Docker Desktop 进行身份验证。请参阅下方的 注意事项部分,了解使用此功能时的限制详情。
重要
从 Docker Desktop 4.36 版本开始,您可以强制多个组织进行登录。如果开发者属于多个具有不同 RAM 策略的组织,则仅强制执行
registry.json文件、.plist文件或注册表键中列出的第一个组织的 RAM 策略。
提示
由于 RAM 设置了有关内容获取来源的策略,因此当 ADD 指令的参数为 URL 时,Dockerfile 的 ADD 指令也会受到注册表访问限制。建议您将 URL 参数的域名添加到组织“注册表访问管理”设置下的允许注册表地址列表中。
要配置注册表访问管理权限,请执行以下步骤:
登录到 管理控制台。
在左侧导航下拉菜单中选择您的组织,然后选择Registry access。
启用注册表访问管理以设置注册表的权限。
注意
启用后,Docker Hub 注册表会被设为默认值,但您也可以为您的开发者限制此注册表。
选择 添加注册表 并在相应字段中输入您的注册表详细信息,然后选择 创建 将注册表添加到您的列表中。您可以添加的注册表数量没有限制。
验证注册表是否出现在您的列表中,然后选择Save changes。
添加注册表后,可能需要长达 24 小时才能在开发人员的机器上强制执行更改。
如果您希望更快地应用更改,您必须在开发者的机器上强制退出 Docker 登录,并让开发者重新对 Docker Desktop 进行身份验证。请参阅下方的 注意事项部分,了解使用此功能时的限制详情。
重要
从 Docker Desktop 4.36 版本开始,您可以强制多个组织进行登录。如果开发者属于多个具有不同 RAM 策略的组织,则仅强制执行
registry.json文件、.plist文件或注册表键中列出的第一个组织的 RAM 策略。
提示
由于 RAM 设置了有关内容获取来源的策略,因此当 ADD 指令的参数为 URL 时,Dockerfile 的 ADD 指令也会受到注册表访问限制。建议您将 URL 参数的域名添加到组织“注册表访问管理”设置下的允许注册表地址列表中。
验证限制
新的注册表访问管理策略在开发人员使用其组织凭据成功通过 Docker Desktop 身份验证后生效。如果开发人员尝试通过 Docker CLI 从不允许的注册表中拉取镜像,他们将收到一条错误消息,指出组织已禁止该注册表。
注意事项
使用注册表访问管理存在某些限制:
- 默认情况下,Windows 镜像拉取和镜像构建不受限制。若要在 Windows 容器模式下生效注册表访问管理,您必须通过选择 为 Windows Docker 守护进程使用代理 设置,允许 Windows Docker 守护进程使用 Docker Desktop 的内部代理。
- 使用 Kubernetes 驱动程序的构建(例如
docker buildx)不受限制 - 使用自定义 docker-container 驱动程序的构建(例如
docker buildx)不受限制 - 阻断是基于 DNS 的;您必须使用注册表的访问控制机制来区分“推送”和“拉取”
- WSL 2 需要至少 5.4 系列的 Linux 内核(这不适用于早期的 Linux 内核系列)
- 在 WSL 2 网络下,来自所有 Linux 发行版的流量均受限制(此问题将在更新的 5.15 系列 Linux 内核中解决)
- 即使 Docker Hub 被 RAM 封锁,当启用 Docker Debug 或 Kubernetes 时,由 Docker Desktop 拉取的镜像默认也不受限制。
此外,注册表访问管理是在主机级别而非 IP 地址级别上运作的。开发者可以在其域名解析中绕过此限制,例如通过针对本地代理运行 Docker 或修改其操作系统的 sts 文件。阻止这些形式的操纵不在 Docker Desktop 的职权范围内。