当前位置:   article > 正文

Dockerhub最新的toomanyrequests问题_error response from daemon: toomanyrequests: you h

error response from daemon: toomanyrequests: you have reached your pull rate

问题描述

今天从Dockerhub拉取镜像的时候报了一个错误,如下:

  1. ➜ ~ docker pull curlimages/curl
  2. Using default tag: latest
  3. Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit

从日志上看到,我已经达到了拉取的上限了。但我之前从来没有听说过有这样的限制。

使用Dockerhub账号

首先点击进入参考的文档,可以看到这是前几天刚刚生效的限制,用于限制匿名账户和免费账户每6个小时分别限制为100和200个容器。

在看到这个文档的时候,我意识到一直以来都是以匿名的形式来拉取镜像,所以当出现这个问题的时候,是限制到了每6个小时100的阈值内。所以此时我尝试登陆账号来进行拉取:

  1. [centos@master ~]$ docker login
  2. Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
  3. Username: wangjianchong
  4. Password:
  5. WARNING! Your password will be stored unencrypted in /home/centos/.docker/config.json.
  6. Configure a credential helper to remove this warning. See
  7. https://docs.docker.com/engine/reference/commandline/login/#credentials-store
  8. Login Succeeded
  9. [centos@master ~]$ docker pull curlimages/curl
  10. Using default tag: latest
  11. latest: Pulling from curlimages/curl
  12. aad63a933944: Pull complete
  13. d47e05aac27c: Pull complete
  14. fd1e9b16f149: Pull complete
  15. 4863971a917c: Pull complete
  16. 6278c6418410: Pull complete
  17. 0ad811736efa: Pull complete
  18. da1a9375412a: Pull complete
  19. 77b6e91e3346: Pull complete
  20. ed8f8949fec1: Pull complete
  21. Digest: sha256:5329ee280d3d91f3e48885f18c884af5907b68c6aa80f411927a5a28c4f5df07
  22. Status: Downloaded newer image for curlimages/curl:latest

将用户名密码写到配置中

当我重新开启一个新的终端,想再拉取新的镜像的时候会发现:

  1. [centos@master ~]$ docker pull nginx
  2. Using default tag: latest
  3. Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit

还是会报相同的错,需要再次登陆,那有没有一劳永逸的办法?肯定是有的,我们可以把用户名密码写到配置中,这样在每次拉取镜像的时候就不需要额外登陆了。

  1. [centos@master ~]$ cat ~/.docker/config.json
  2. {
  3. "auths": {
  4. "https://index.docker.io/v1/": {
  5. "auth": "aGhoaDpoaGhoCg=="
  6. }
  7. }
  8. }

其中,auth字段内容就是username:password 的base64 编码。配置完成后,我们在执行docker pull nginx即可拉取最新的nginx镜像即可成功。

原因分析

检测拉取次数原理是同一个IP一个时间范围内不应该拉取过多次数。公司的测试机都是虚拟机,都是同一IP的。

缺点

将用户名密码写到配置文件中是不安全的。如何将登陆凭证进行安全存储,可以参考REFERENCE最后一个链接。

后续

当我在rancher部署的kubernetes集群中的一台slave机器配置了docker的配置文件后,集群上的每一台机器都同步到了。但是仍旧出现了上述的问题,所以我当天就下班了(滑稽脸)。

第二天来上班发现所有的pod一起成功运行了,有点奇怪。不清楚k8s是怎样怎样使用docker来拉取新镜像的。不过这个问题并没有影响本篇文章关于toomanyreqeust问题的处理。

REFERENCE

https://support.circleci.com/hc/en-us/articles/360049758552-My-build-fails-to-pull-Docker-image-with-Too-Many-Requests-Rate-Limiting-by-Docker-Hub​support.circleci.com

Increase Rate Limits​www.docker.com图标Docker Login登录凭证安全存储​youendless.com图标

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/501280
推荐阅读
相关标签
  

闽ICP备14008679号