Docker Hub 速率限制

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

Docker Hub 根据拉取映像的用户的帐户类型来限制 Docker 映像下载或拉取的数量。拉取速率限制基于各个 IP 地址。

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

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

限制的定义

用户的限制等于其个人帐户或其所属的任何组织的最高权限。要利用此功能,您必须 以经过身份验证的用户身份登录Docker Hub 。有关更多信息,请参阅 如何验证拉取请求。未经身份验证(匿名)的用户将通过 IP 强制实施限制。

  • 拉取操作由执行拉取操作的用户负责,而不是由镜像所有者负责。
  • 拉取请求定义为GET对注册表清单 URL ( /v2/*/manifests/*) 最多两个请求。
  • 正常的图像拉取会发出单个清单请求。
  • 多架构映像的拉取请求会发出两个清单请求。
  • HEAD请求不计算在内。
  • 通过我们的Docker 赞助的开源Docker 验证的发布者计划,某些图像是不受限制的 。

我如何知道我的拉取请求受到限制?

当您发出拉取请求并且超出限制时,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 引擎日志中。

我如何查看我当前的费率?

对 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 计划的一部分。如果您没有看到这些标题,则拉取该图像将不会计入拉取限制。但是,每天拉取超过 5000 次的付费 Docker 订阅的用户需要 订阅服务帐户

即使我有付费的 Docker 订阅,我仍被限制为较低的费率

要利用付费 Docker 订阅中包含的更高限制,您必须使用 您的用户帐户对拉取进行身份验证。

专业版、团队版或商务版不会增加其他用户对您的图像的限制。请参阅 Docker 的 开源发布者大型组织产品。

如何验证拉取请求?

以下部分包含有关如何登录 Docker Hub 以验证拉取请求的信息。

Docker 桌面

如果您使用的是 Docker Desktop,则可以从 Docker Desktop 菜单登录 Docker Hub。

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

Docker引擎

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

Docker群

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

GitHub 操作

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

Kubernetes

如果您正在运行 Kubernetes,请按照从私有注册表中提取映像中的说明 获取有关身份验证的信息。

第三方平台

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

其他限制

Docker Hub 还具有总体速率限制以保护应用程序和基础设施。此限制适用于对 Hub 属性的所有请求,包括网页、API 和图像拉取。该限制适用于每个 IP,虽然该限制会随着时间的推移而变化,具体取决于负载和其他因素,但它的数量级为每分钟数千个请求。总体速率限制同样适用于所有用户,无论帐户级别如何。

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