Docker Hub限制镜像拉取次数的解释
上一篇Docker要开始收费了么?发布之后,有同学问了这样一个问题。“我不注册docker hub,不登陆,它怎么限制我拉取镜像的次数?”,今天就快速回答一下这个问题
Docker Hub镜像拉取限速
•匿名用户,也就是没有登陆docker hub (通过 docker login命令),限制是每6小时最多拉取100次•登录用户(免费),限制是每6小时最多拉取200次
一旦超过,镜像拉取就会失败,报错信息如下
ERROR: toomanyrequests:TooManyRequests.或者
You have reached your pull rate limit.You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits. You must authenticate your pull requests.匿名用户拉取次数的限制
对于匿名用户,这个限制是通过IP地址进行的。
为了确保匿名用户,进行下面的实验之前,请先运行一下
docker logoutdocker提供了一个API可以查看你最近6小时用了多少镜像拉取,还剩下多少次可以用,方法如下(我这里通过Linux)
TOKEN=$(curl "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
你会获取到这样的结果
HTTP/1.1200 OKcontent-length:2782content-type: application/vnd.docker.distribution.manifest.v1+prettyjwsdocker-content-digest: sha256:767a3815c34823b355bed31760d5fa3daca0aec2ce15b217c9cd83229e0e2020docker-distribution-api-version: registry/2.0etag:"sha256:767a3815c34823b355bed31760d5fa3daca0aec2ce15b217c9cd83229e0e2020"date:Sat,04Sep202119:33:21 GMTstrict-transport-security: max-age=31536000ratelimit-limit:100;w=21600ratelimit-remaining:100;w=21600
ratelimit-limit: 100;w=21600 意思是每6小时(21600秒)你可以拉取镜像100次
ratelimit-remaining: 100;w=21600 意思是还剩下100次
拉几次镜像后,再查看,就会看待剩余次数的减少(比如下面98次)
ratelimit-limit:100;w=21600ratelimit-remaining:98;w=21600
这个时候如果你使用家里的其它电脑匿名拉取一下镜像,你会看到剩余次数再次减少(因为你家里的电脑公用的同一个公网IP)
ratelimit-limit:100;w=21600ratelimit-remaining:97;w=21600
注意,这个API的token失效时间非常短,如果获取失败,请重新生成token
登录用户的拉取次数限制
通过 docker login 登录一下,然后再次查看次数
注意,重新生成token,加上你的docker hub用户名和密码
➜~ TOKEN=$(curl --user 'username:password'"https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)%Total%Received%XferdAverageSpeedTimeTimeTimeCurrentDloadUploadTotalSpentLeftSpeed1004476044760071610--:--:----:--:----:--:--7150➜~ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latestHTTP/1.1200 OKcontent-length:2782content-type: application/vnd.docker.distribution.manifest.v1+prettyjwsdocker-content-digest: sha256:767a3815c34823b355bed31760d5fa3daca0aec2ce15b217c9cd83229e0e2020docker-distribution-api-version: registry/2.0etag:"sha256:767a3815c34823b355bed31760d5fa3daca0aec2ce15b217c9cd83229e0e2020"date:Sat,04Sep202119:49:22 GMTstrict-transport-security: max-age=31536000ratelimit-limit:200;w=21600ratelimit-remaining:200;w=21600➜~
限制次数就变成每6小时200次了。
参考资料
https://docs.docker.com/docker-hub/download-rate-limit/#how-do-i-authenticate-pull-requests https://www.docker.com/increase-rate-limits https://www.docker.com/blog/checking-your-current-docker-pull-rate-limits-and-status/