注册表访问管理
通过注册表访问管理 (RAM),管理员可以确保使用 Docker Desktop 的开发人员只访问允许的注册表。这可以通过 Docker Hub 或 Docker Admin Console 中的注册表访问管理仪表板来完成。
注册表访问管理支持云端和本地注册表。此功能在 DNS 级别运行,因此兼容所有注册表。您可以将任何想要包含在允许的注册表列表中的主机名或域名添加进去。但是,如果注册表重定向到其他域(例如 s3.amazon.com
),则必须将这些域添加到列表中。
管理员可以允许的示例注册表包括
- Docker Hub。默认启用。
- Amazon ECR
- GitHub Container Registry
- Google Container Registry
- GitLab Container Registry
- Nexus
- Artifactory
前提条件
您必须强制登录。为了使注册表访问管理生效,Docker Desktop 用户必须对您的组织进行身份验证。强制登录确保您的 Docker Desktop 开发人员始终对您的组织进行身份验证,即使他们可以在不强制登录的情况下进行身份验证且该功能仍会生效。强制登录保证该功能始终生效。
配置注册表访问管理权限
要配置注册表访问管理权限,请执行以下步骤
登录到 Admin Console。
在左侧导航下拉菜单中选择您的组织,然后选择 Registry access。
启用注册表访问管理以设置您的注册表的权限。
注意
启用后,默认设置 Docker Hub 注册表;但是您也可以为您的开发人员限制此注册表。
选择Add registry并在适用字段中输入注册表详细信息,然后选择Create将注册表添加到您的列表中。您最多可以添加 100 个注册表/域。
验证注册表出现在您的列表中,然后选择Save changes。
添加注册表后,更改可能需要长达 24 小时才能在开发人员的机器上强制实施。
如果您希望更改更快生效,则必须强制开发人员的机器上的 Docker 注销,并让开发人员重新对 Docker Desktop 进行身份验证。有关限制的更多信息,请参阅下面的注意事项部分。
重要
从 Docker Desktop 4.36 版本开始,您可以对多个组织强制执行登录。如果开发人员属于具有不同 RAM 策略的多个组织,则仅强制执行
registry.json
文件、.plist
文件或注册表项中列出的第一个组织的 RAM 策略。
提示
由于 RAM 设置了可以从何处获取内容的策略,因此当 Dockerfile 的 ADD 指令的参数是 URL 时,该指令也受到注册表限制的影响。
如果您使用 ADD 通过 URL 从受信任的注册表获取镜像或制品,请确保注册表的域包含在您组织的允许注册表列表中。
RAM 不旨在限制对通用外部 URL 的访问,例如软件包镜像或存储服务。尝试添加过多的域可能会导致错误或达到系统限制。
重要
组织管理正在迁移到 Admin Console。
在 Docker Admin Console 中管理成员、团队、设置和活动日志。对 Docker Hub 中这些功能的访问将很快结束。探索 Admin Console。
要配置注册表访问管理权限,请执行以下步骤
登录到 Docker Hub。
选择My Hub,您的组织,Settings,然后选择Registry Access。
启用注册表访问管理以设置您的注册表的权限。
注意
启用后,默认设置 Docker Hub 注册表;但是您也可以为您的开发人员限制此注册表。
选择Add registry并在适用字段中输入注册表详细信息,然后选择Create将注册表添加到您的列表中。您最多可以添加 100 个注册表/域。
验证注册表出现在您的列表中,然后选择Save changes。
添加注册表后,更改可能需要长达 24 小时才能在开发人员的机器上强制实施。
如果您希望更改更快生效,则必须强制开发人员的机器上的 Docker 注销,并让开发人员重新对 Docker Desktop 进行身份验证。有关限制的更多信息,请参阅下面的注意事项部分。
重要
从 Docker Desktop 4.36 版本开始,您可以对多个组织强制执行登录。如果开发人员属于具有不同 RAM 策略的多个组织,则仅强制执行
registry.json
文件、.plist
文件或注册表项中列出的第一个组织的 RAM 策略。
提示
由于 RAM 设置了可以从何处获取内容的策略,因此当 Dockerfile 的 ADD 指令的参数是 URL 时,该指令也受到注册表限制的影响。
如果您使用 ADD 通过 URL 从受信任的注册表获取镜像或制品,请确保注册表的域包含在您组织的允许注册表列表中。
RAM 不旨在限制对通用外部 URL 的访问,例如软件包镜像或存储服务。尝试添加过多的域可能会导致错误或达到系统限制。
验证限制
新的注册表访问管理策略在开发人员使用其组织凭据成功对 Docker Desktop 进行身份验证后生效。如果开发人员尝试通过 Docker CLI 从不允许的注册表拉取镜像,他们将收到一个错误消息,指出组织已禁止此注册表。
注意事项
使用注册表访问管理时存在某些限制
- 您最多可以添加 100 个注册表/域。
- Windows 镜像拉取和镜像构建默认不受限制。为了使注册表访问管理在 Windows 容器模式下生效,您必须通过选择“Use proxy for Windows Docker daemon”设置,允许 Windows Docker Daemon 使用 Docker Desktop 的内部代理。
- 使用 Kubernetes 驱动程序的构建(例如
docker buildx
)不受限制。 - 使用自定义 docker-container 驱动程序的构建(例如
docker buildx
)不受限制。 - 阻止基于 DNS。您必须使用注册表的访问控制机制来区分“推送”和“拉取”。
- WSL 2 需要至少 5.4 系列的 Linux 内核(这不适用于更早的 Linux 内核系列)。
- 在 WSL 2 网络下,来自所有 Linux 发行版的流量都受到限制。这将在更新的 5.15 系列 Linux 内核中解决。
- 启用 Docker Debug 或 Kubernetes 时 Docker Desktop 拉取的镜像,即使 Docker Hub 被 RAM 阻止,默认也不受限制。
此外,注册表访问管理在主机层面而非 IP 地址层面运作。开发人员可以通过修改其域解析来绕过此限制,例如通过针对本地代理运行 Docker 或修改其操作系统的 hosts
文件。阻止这些形式的操纵不在 Docker Desktop 的职责范围内。