下载速率限制
预计阅读时间: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不会,因此在本示例中将使用它。要检查自己的极限,你需要curl
,grep
和jq
安装。
匿名获取令牌(如果您匿名获取令牌):
$ 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
响应。拉动限制将返回较长的错误消息,其中包括指向此页面的链接。