Docker Hub 使用情况和速率限制

重要

Docker 正在推出增强的订阅计划。我们的新计划包含更多功能、更高的使用限制和简化的定价。新的订阅计划将在 2024 年 12 月 10 日或之后到期的下一个续订日期生效。在 2025 年 2 月 28 日之前,不会对 Docker Hub 镜像拉取或存储产生任何费用。请参阅 宣布升级的 Docker 计划了解更多详情,并了解您的使用情况如何适应这些更新。

Docker 可能会对 Docker Hub 实施使用情况和速率限制,以确保公平地使用资源并保持服务质量。了解您的使用情况有助于您有效地管理您和您组织的使用情况。

用法

使用情况指的是:

  • 拉取:从 Docker Hub 传输的数据量
  • 存储:存储在 Docker Hub 上的数据量

公平使用

使用 Docker 平台时,用户应注意,过多的数据传输、拉取速率或数据存储可能会导致限制或额外收费。为确保公平地使用资源并保持服务质量,我们保留对显示过度数据和存储消耗的帐户施加限制或收取额外费用的权利。

查看 Docker Hub 使用情况

  1. 登录 Docker Hub

    如果您要下载组织所有成员的使用情况,则必须登录到该组织所有者的帐户。否则,您只能查看您自己的个人使用情况。

  2. 在 Docker Hub 中,从顶级导航菜单中选择**使用情况**。

  3. 在下拉菜单中,选择是要查看您的个人数据还是组织数据。

  4. 使用情况页面显示**拉取**和**存储**使用情况。

  5. 选择使用类型并使用可用的过滤器查看使用情况。

下载 Docker Hub 使用情况

您可以下载您或您组织的 Docker Hub 使用情况的 CSV 文件。要下载文件

  1. 登录 Docker Hub

    如果您要下载组织所有成员的使用情况,则必须登录到该组织所有者的帐户。否则,您只能查看您自己的个人使用情况。

  2. 在 Docker Hub 中,从顶级导航菜单中选择**使用情况**。

  3. 在下拉菜单中,选择是要查看您的个人数据还是组织数据。

  4. 可选。使用**按隐私筛选**下拉菜单选择**公共**或**私有**拉取。

  5. 使用**从**和**到**过滤器选择数据的日期范围。

  6. 选择**将报告发送到电子邮件**,即可让 Docker 通过电子邮件向您发送数据文件的链接。请注意,电子邮件处理时间可能会有所不同。

文件包含以下逗号分隔值

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

优化和管理 Docker Hub 使用情况

请按照以下步骤来帮助优化和管理您个人和组织的 Docker Hub 使用情况。

  1. 查看您的 Docker Hub 使用情况.

  2. 使用 Docker Hub 使用数据来识别哪些帐户消耗了最多的数据,确定高峰使用时间,并识别哪些镜像与最多的数据使用相关。此外,还要查找以下使用趋势:

    • 低效的拉取行为:识别经常访问的存储库,以评估您是否可以优化缓存实践或合并使用以减少拉取。
    • 低效的自动化系统:检查哪些自动化工具(例如 CI/CD 管道)可能导致更高的拉取率,并对其进行配置以避免不必要的镜像拉取。
  3. 通过执行以下操作来优化镜像拉取:

    • 使用缓存:通过镜像或在您的 CI/CD 管道中实现本地镜像缓存,以减少冗余拉取。
    • 自动化手动工作流程:通过配置自动化系统仅在新的镜像版本可用时进行拉取,从而避免不必要的拉取。
  4. 通过定期审核和删除未标记、未使用或过时的镜像来优化存储库的大小。

  5. 通过升级或购买附加组件来提高您的限制。详情请参阅Docker 定价

  6. 对于组织,请通过执行以下操作来监控和执行组织策略:

拉取归属

拉取可以归因于个人或组织命名空间

私有拉取

私有存储库的拉取将归因于存储库的命名空间所有者。

公共拉取

从公共存储库拉取镜像时,归属将根据域关联和组织成员身份确定。

已验证的域名所有权

从与已验证域关联的帐户拉取镜像时,归属将设置为该的所有者的。

单个组织成员资格

  • 如果已验证域的所有者是公司,并且用户仅属于该公司内的多个组织之一,则该拉取将归因于该特定组织。
  • 如果用户只属于一个组织,则拉取将归因于该特定组织。

多个组织成员资格

如果用户属于公司中的多个组织,则拉取将归因于用户的个人命名空间。

速率限制

速率限制适用于拉取使用情况。用户的速率限制等于其个人帐户或其所属任何组织的最高权限。要利用此功能,您必须以已验证用户的身份登录到Docker Hub。更多信息,请参见如何对拉取请求进行身份验证。未经身份验证(匿名)的用户将通过 IP 执行限制。

  • 拉取将计入执行拉取的用户,而不是镜像的所有者。
  • 拉取请求定义为对注册表清单 URL(/v2/*/manifests/*)最多进行两次 GET 请求。
  • 正常的镜像拉取会发出单个清单请求。
  • 多架构镜像的拉取请求会发出两个清单请求。
  • HEAD 请求不计入。
  • 通过Docker 赞助的开源Docker 已验证发布者程序中,一些镜像是无限的。

重要

Docker 正在推出增强的订阅计划。我们的新计划包含更多功能、更高的使用限制和简化的定价。新的订阅计划将在 2024 年 12 月 10 日或之后到期的下一个续订日期生效。在 2025 年 2 月 28 日之前,不会对 Docker Hub 镜像拉取或存储产生任何费用。请参阅 宣布升级的 Docker 计划了解更多详情,并了解您的使用情况如何适应这些更新。

请注意,当这些更改生效时,拉取请求和限制的以下新定义将生效:

  • Docker 拉取请求包括版本检查以及拉取结果产生的任何下载。根据客户端的不同,docker pull 可以通过执行版本检查来验证镜像或标签的存在,而无需下载它。
  • 针对普通镜像的拉取请求,会为一个单一清单文件计一次拉取。
  • 针对多架构镜像的拉取请求,将为每个不同的架构计一次拉取。
  • 拉取将计入执行拉取的用户,而不是镜像的所有者。

Docker Hub 的下载速率限制是多少?

重要

2025年3月3日之后,随着Docker增强型订阅计划的推出,付费订阅的用户或自动化系统将不再受镜像拉取速率限制。

使用Docker Hub的匿名用户和Docker个人用户将受到镜像拉取请求的速率限制。对于已认证用户,每用户每小时将限制为40次拉取;对于未认证的使用,每个IP地址每小时将限制为10次拉取。

Docker Hub根据拉取镜像用户的账户类型限制Docker镜像下载(或拉取)次数。拉取速率限制基于单个IP地址。下表反映了Docker当前的速率限制。

用户类型速率限制
匿名用户每个IP地址每6小时100次拉取
已认证用户每6小时200次拉取
拥有付费Docker订阅的用户每天最多5000次拉取

如果您需要更多次的拉取,也可以购买增强型服务账户附加组件

我怎么知道我的拉取请求受到限制?

当您发出拉取请求并且超过限制时,在请求清单文件时,Docker Hub将返回带有以下正文的429响应代码。

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

此错误消息将显示在Docker CLI或Docker Engine日志中。

如何检查我的当前速率?

有效的Hub API请求通常会在响应中包含以下速率限制标头。

ratelimit-limit
ratelimit-remaining
docker-ratelimit-source

这些标头在GET和HEAD请求中都会返回。

注意

使用GET模拟真实的拉取,并计入限制。使用HEAD不会。要检查您的限制,您需要安装curlgrepjq

如果您匿名拉取,则获取匿名令牌的方法如下:

$ 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)

然后,要获取显示您限制的标头,请运行以下命令:

$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest

应该返回以下标头:

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

在前面的示例中,拉取限制是每21600秒(6小时)100次拉取,剩余76次拉取。

我没有看到任何RateLimit标头。

如果您没有看到任何RateLimit标头,可能是因为该镜像或您的IP与发布者、提供商或开源组织之间具有无限制的合作关系。这也可能意味着您正在以其身份进行拉取的用户属于付费的Docker计划。如果您没有看到这些标头,则拉取该镜像不会计入拉取限制。但是,拥有付费Docker订阅的用户每天拉取超过5000次需要服务账户订阅。

即使我拥有付费 Docker 订阅,我的速率仍然受到限制

要利用付费Docker订阅中包含的更高限制,您必须使用您的用户账户认证拉取请求

Pro、Team或Business级别不会增加其他用户对您镜像的限制。请参阅Docker的开源发布者大型组织产品。

其他限制

Docker Hub还具有整体速率限制以保护应用程序和基础设施。此限制适用于对Hub属性的所有请求,包括网页、API和镜像拉取。此限制按IP应用,虽然限制会随着负载和其他因素的变化而变化,但它大约是每分钟数千个请求。无论账户级别如何,整体速率限制都平等地适用于所有用户。

您可以通过查看错误代码来区分这些限制。“整体限制”返回简单的429 Too Many Requests响应。拉取限制返回更长的错误消息,其中包含指向此页面的链接。

如何验证拉取请求?

以下部分包含有关如何登录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,请参阅login action。如果您使用的是其他Action,则必须以类似的方式添加您的用户名和访问令牌以进行身份验证。

Kubernetes

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

第三方平台

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