Docker Hub 拉取使用和限制

未经身份验证的用户和 Docker Personal 用户在 Docker Hub 上受到 6 小时拉取速率限制。而 Docker Pro、Team 和 Business 用户则享有无限拉取速率。

根据您的订阅,以下拉取使用和限制适用,但须遵守合理使用原则

用户类型每 6 小时拉取速率限制
商业版(已验证)无限制
团队版(已验证)无限制
专业版(已验证)无限制
个人版(已验证)200
未经身份验证的用户每个 IPv4 地址或 IPv6 /64 子网 100 次

拉取定义

拉取定义如下

  • Docker 拉取包括版本检查和因拉取而发生的任何下载。根据客户端的不同,docker pull 可以通过执行版本检查来验证图像或标签是否存在,而无需下载它。
  • 版本检查不计入使用定价。
  • 正常镜像的一次拉取对应 单个清单 的一次拉取。
  • 多架构镜像的一次拉取将计为每种不同架构的一次拉取。

拉取归属

来自已验证用户的拉取可以归因于个人或组织命名空间

归属基于以下规则

  • 私有拉取:对私有仓库的拉取归因于该仓库的命名空间所有者。
  • 公共拉取:从公共仓库拉取镜像时,归属由域关联和组织成员身份决定。
  • 已验证域所有权:当从链接到已验证域的帐户拉取镜像时,归属设置为该的所有者。
  • 单一组织成员身份
    • 如果已验证域的所有者是一家公司,并且用户在该公司内只属于一个组织,则拉取归因于该特定组织。
    • 如果用户只属于一个组织,则拉取归因于该特定组织。
  • 多个组织成员身份:如果用户属于公司下的多个组织,则拉取归因于用户的个人命名空间。

身份验证

为确保您的拉取正确归属,您必须通过 Docker Hub 进行身份验证。以下章节提供有关如何登录 Docker Hub 以验证您的拉取的信息。

Docker Desktop

如果您正在使用 Docker Desktop,您可以从 Docker Desktop 菜单登录 Docker Hub。

从 Docker Desktop 菜单中选择 登录/创建 Docker ID,然后按照屏幕上的说明完成登录过程。

Docker Engine

如果您使用的是独立版 Docker Engine,请从终端运行 docker login 命令以通过 Docker Hub 进行身份验证。有关如何使用该命令的信息,请参阅 docker login

Docker Swarm

如果您正在运行 Docker Swarm,您必须使用 --with-registry-auth 标志来通过 Docker Hub 进行身份验证。有关更多信息,请参阅 创建服务。如果您正在使用 Docker Compose 文件部署应用程序堆栈,请参阅 docker stack deploy

GitHub Actions

如果您正在使用 GitHub Actions 构建并推送 Docker 镜像到 Docker Hub,请参阅 登录操作。如果您正在使用其他操作,您必须以类似的方式添加您的用户名和访问令牌进行身份验证。

Kubernetes

如果您正在运行 Kubernetes,请按照 从私有注册表拉取镜像 中的说明进行身份验证。

第三方平台

如果您正在使用任何第三方平台,请按照您的提供商关于使用注册表身份验证的说明进行操作。

注意

通过第三方平台拉取镜像时,该平台可能会使用相同的 IPv4 地址或 IPv6 /64 子网为多个用户拉取镜像。即使您已通过身份验证,归因于单个 IPv4 地址或 IPv6 /64 子网的拉取也可能导致滥用速率限制

查看每月拉取和包含的使用情况

您可以在 Docker Hub 的使用情况页面上查看您的每月拉取量。

在该页面上,您还可以向您的电子邮件发送一份报告,其中包含以下详细信息的逗号分隔文件。

CSV 列定义使用指南
日期小时导致数据传输的拉取的日期和小时(yyyy/mm/dd/hh)。这有助于识别高峰使用时间和模式。
user_name拉取镜像的用户的 Docker ID这使得组织所有者能够跟踪每个用户的数据消耗并有效管理资源。
仓库被拉取镜像的仓库名称。这使您能够识别哪些仓库被访问最频繁并消耗大部分数据传输。
access_token_name用于 Docker CLI 身份验证的访问令牌名称。generated 令牌由 Docker 客户端在用户登录时自动生成。个人访问令牌通常用于验证自动化工具(Docker Desktop、CI/CD 工具等)。这对于识别是哪个自动化系统发出了拉取非常有用。
ips用于拉取镜像的 IP 地址。此字段是聚合的,因此可能会出现多个 IP 地址,表示在同一日期和小时内用于拉取镜像的所有 IP 地址。这有助于您了解数据传输的来源,这对于诊断和识别自动化或手动拉取中的模式非常有用。
repository_privacy被拉取的镜像仓库的隐私状态。可以是 publicprivate这区分了公共和私有仓库,以识别拉取影响了哪个数据传输阈值。
tag镜像的标签。仅当拉取包含标签时,标签才可用。这有助于识别镜像。标签通常用于识别镜像的特定版本或变体。
摘要镜像的唯一镜像摘要。这有助于识别镜像。
版本检查每个镜像仓库在特定日期和小时内累积的版本检查次数。根据客户端的不同,拉取可以执行版本检查以验证镜像或标签是否存在,而无需下载它。这有助于识别版本检查的频率,您可以用来分析使用趋势和潜在的意外行为。
拉取次数每个镜像仓库在特定日期和小时内累积的拉取次数。这有助于识别仓库拉取的频率,您可以用来分析使用趋势和潜在的意外行为。

查看拉取速率和限制

拉取速率限制以 6 小时为基础计算。对于付费订阅用户或自动化系统,没有拉取速率限制。未经身份验证的用户和使用 Docker Hub 的 Docker Personal 用户将遇到镜像拉取速率限制。

当您发出拉取并且超出限制时,当请求清单时,Docker Hub 会返回 429 响应代码,其正文如下:

You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits

此错误消息会出现在 Docker CLI 或 Docker Engine 日志中。

要查看您当前的拉取速率和限制

注意

要检查您的限制,您需要安装 curlgrepjq

  1. 获取一个令牌。

    • 如果您匿名拉取,则匿名获取令牌

      $ TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
      
    • 如果您已通过身份验证,则使用用户帐户获取令牌,请在以下命令中插入您的用户名和密码

      $ TOKEN=$(curl --user 'username:password' "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
      
  2. 获取包含您限制的标头。这些标头在 GET 和 HEAD 请求中都会返回。使用 GET 模拟实际拉取并计入限制。使用 HEAD 则不会。

    $ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest
    
  3. 检查标头。您应该会看到以下标头。

    ratelimit-limit: 100;w=21600
    ratelimit-remaining: 20;w=21600
    docker-ratelimit-source: 192.0.2.1

    在前面的示例中,拉取限制是每 21600 秒(6 小时)100 次拉取,并且还剩下 20 次拉取。

    如果您没有看到任何 ratelimit 标头,可能是因为该镜像或您的 IP 地址与发布者、提供商或开源组织合作而无限制。这还可能意味着您拉取时的用户是付费 Docker 订阅的一部分。如果您没有看到这些标头,拉取该镜像将不计入拉取速率限制。

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.