下载速率限制

预计阅读时间:5分钟

Docker已为Docker Hub上的拉取请求启用了下载速率限制。限额是根据帐户类型确定的。有关更多信息,请参阅资源消耗常见问题Docker Hub定价

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

  • 一个拉取请求被定义为GET对注册表清单URL(/v2/*/manifests/*)的最多两个请求。
  • 正常的图像提取仅发出一个清单请求。
  • 对多体系结构映像的拉取请求发出两个清单请求。
  • HEAD 请求不计算在内。
  • 限制是基于执行拉动的用户,而不是基于要拉动的图像或其所有者。

Docker将从2020年11月2日开始逐步引入这些速率限制。

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

当您发出拉取请求且您的帐户类型超出限制429时,当请求清单时,Docker Hub将返回带有以下正文的响应代码:

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日志中看到此错误消息。

我如何查看我的当前汇率

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

RateLimit-Limit    
RateLimit-Remaining

这些标头将同时在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

这意味着我的极限是每21600秒(6小时)为100,而我还剩下76次拉动。

请记住,这些标头是尽力而为的,并且会有很小的变化。

我没有看到任何RateLimit标头

如果您没有看到这些标题,则表示拉出该图像将不计入拉出限制。这可能是因为您已通过与Legacy / Pro / Team Docker Hub帐户关联的用户进行身份验证,或者由于与发布者,提供商或开源组织合作,映像或IP不受限制。

如何验证拉取请求

下一节包含有关如何登录Docker Hub来验证拉取请求的信息。

Docker桌面

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

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

Docker引擎

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

码头工人

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

GitHub动作

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

Kubernetes

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

第三方平台

如果您使用任何第三方平台,请遵循提供程序有关使用注册表身份验证的说明。

其他限制

Docker Hub还具有总体速率限制,以保护应用程序和基础架构。该限制适用于对集线器属性的所有请求,包括网页,API,图像提取等。该限制是按IP进行的,并且该限制会随时间而变化,具体取决于负载和其他因素,但数量级为数千每分钟的请求数。无论用户级别如何,总费率限制均等地适用于所有用户。

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

Docker拉取请求下载限制