请求过多:您已达到拉取速率限制。您可以通过身份验证和升级来增加限制。

74
当我想使用CodeBuild从CodeCommit中的Dockerfile构建镜像时,为什么会出现这种情况?
我收到了以下错误信息:
toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
11个回答

76

一个解决方案是通过以下命令登录Docker Hub:

$ sudo docker login --username=yourUsername
Password:
WARNING: login credentials saved in C:\Users\sven\.docker\config.json
Login Succeeded

关于登录Docker的更多帮助


3
明白了,只需确保一致使用sudo即可。 - Soren
这个评论帮助我解决了我的问题。谢谢! - Tung
2
我需要在 buildspec.yml 文件中定义这些命令吗? - Zain Khan
不需要。你只需在 shell 中运行此代码即可。 - Amin Golmahalle
我正在使用AWS代码管道将Docker化的应用部署到EC2上,但当我运行管道时遇到了这些问题,那么我该如何解决呢? - Zain Khan
@AminGolmahalle 请看一下 https://dev59.com/7HENtIcB2Jgan1zn5jr0 - Zain Khan

65

3
那个建议链接真是救了我一命。谢谢你发布它。 - ArcticDoom
1
谢谢你的回答。它救了我的一天 :) - undefined

22
如果您在机器上运行docker pull一次,那么在以后运行您的Dockerfile时,它将使用本地副本而不是访问Docker Hub(并使用您的速率限制)。因此,对于我来说,我运行了这个命令一次:
docker pull ubuntu:18.04

...之后的几次运行都没问题。

或者,通过将我的Dockerfile切换到AWS公共Docker仓库来进行切换:

FROM ubuntu:18.04

FROM public.ecr.aws/lts/ubuntu:latest
也适用于我。

12

为什么会出现这个错误?

当您已达到Docker拉取速率限制后,尝试从公共Docker Hub存储库中拉取镜像时,就会出现此错误。 Docker Hub使用IP地址对用户进行身份验证,并基于单个IP地址设置拉取速率限制。

  • 对于匿名用户,速率限制设置为每个IP地址的6小时内100次拉取。
  • 对于拥有Docker ID的经过身份验证的用户,拉取速率设置为每个6小时期间200次拉取。
  • 如果您的镜像拉取请求超过这些限制,则这些请求将被拒绝,直到六小时窗口结束。

每次docker pull命令执行都会计入您的配额,无论所请求的镜像是否是最新的。如果将应用程序堆栈部署到群集上,则很容易达到请求限制。

解决方案:

1. 使用Amazon ECR公共注册表获取公共容器镜像

通过从Amazon ECR公共注册表中拉取镜像,可以避免达到Docker Hub的速率限制。 Amazon ECR公共注册表包含流行的基本镜像,包括操作系统、AWS发布的镜像等。

例如:

FROM public.ecr.aws/lts/ubuntu:latest

2. 订阅 Docker Hub

这将允许您增加认证用户的拉取限制,并使匿名用户的限制变为无限制。如果您是个人或一小团队(2-10人),只需要一个存储镜像的空间,那么支付每个用户每月 5 到 7 美元是最简单的解决方案。

3. 镜像到您自己的注册表

从 Docker Hub 到您自己的注册表复制或镜像镜像乍一看可能有些超前,但它对于安全和治理有两个主要好处,并被认为是最佳实践,特别是在企业上下文中使用容器的情况下。

4. 代理到 Docker Hub

第三种选择与选项#2非常相似,但不需要复制规则。然而,您可以获得安全和治理的相同好处。在此方案中,您创建所谓的代理缓存项目,该项目将自动存储您上次使用的镜像。稍后可以从代理缓存中提取它们,而不会触及 Docker Hub 的限制。

解决方法(适合我的方法)

5. 将公共映像复制到 Amazon ECR 私有注册表中

创建 Amazon Elastic Container Registry(Amazon ECR)存储库,然后将镜像推送到此新存储库。通过此方法,您可能可以避免超过 Docker Hub 拉取限制,通过从 Amazon ECR 存储库中拉取映像来实现此目的。

然后,我在 Dockerfile 中替换了以下行:

FROM python:3.7

使用

ARG REPO=655606377847.dkr.ecr.us-west-2.amazonaws.com

FROM ${REPO}/python:3.7

P.S. 我将 Python 的镜像标签设置为 3.7 而不是最新版本

更多细节请参见 -


1
如果Amazon ECR Public Gallery没有提供所需的镜像,从Docker Hub复制镜像到私有ECR注册表也是一种选择。
例如 Skopeo可以完成此操作。此代码片段将您的私有注册表与Docker Hub同步: skopeo sync --dest-creds AWS:$(aws ecr get-login-password --output text) --src docker --dest docker docker.io/library/nginx <YourAWSAccountId>.dkr.ecr.eu-central-1.amazonaws.com/

1
在我的情况下,Docker登录没有问题。我能够使用 docker pull nginx下载Docker镜像。但是,当我尝试使用上面的镜像创建k8s Pod时,出现了以下错误:您已达到拉取速率限制。您可以通过进行身份验证和升级来增加限制。这是我解决这个问题的方法创建一个私有Docker注册表

创建并运行私有Docker注册表

docker run -d -p 5000:5000 --restart=always --name registry registry:2

从公共Docker Hub下载nginx镜像

docker pull nginx

在将其推送到私有注册表之前为nginx创建标签

docker tag nginx localhost:5000/nginx

推送到注册表

docker push localhost:5000/nginx

最后成功创建了Pod,并摆脱了这个问题。


0
如果你正在从docker中拉取一个公共镜像,那么你也可以将它推送到你自己的公共ECR仓库。
  1. 创建一个新的公共ECR仓库。
  2. 登录ECR
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
  1. 拉取 Docker 镜像,例如 amazoncorretto:11-alpine
docker pull amazoncorretto:11-alpine

4. 列出 Docker 镜像
docker images

REPOSITORY                                                         TAG             IMAGE ID       CREATED         SIZE
amazoncorretto                                                     11-alpine       e9ae3c220b23   7 weeks ago     325MB
  • 获取镜像ID并将镜像推送到ECR
  • docker tag e9ae3c220b23 public.ecr.aws/registry_alias/my-web-app
    docker push public.ecr.aws/registry_alias/my-web-app
    
    1. 然后更新你的 Dockerfile,构建镜像的基础镜像改为 FROM public.ecr.aws/registry_alias/my-web-app 而不是 FROM amazoncorretto:11-alpine

    0

    你可以选择付费获取更多的尝试机会,或者你可以使用其他替代方案,比如quay.io,例如我从下面的命令中得到了这个:

    $ docker pull minio/console
    Using default tag: latest
    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
    

    然后我决定使用quay.io并获得了我的镜像。
    $ docker pull quay.io/minio/console:v0.18.1
    v0.18.1: Pulling from minio/console
    54e56e6f8572: Pull complete 
    4f8ddd7f5a75: Pull complete 
    0a59d943e0f3: Pull complete 
    c8620cb33d2a: Pull complete 
    88f128a9f647: Pull complete 
    91509978382a: Pull complete 
    Digest: sha256:fb55f9730f554e027af992f12da569285f7f173a6993d02e06a7acbb1ca166a2
    Status: Downloaded newer image for quay.io/minio/console:v0.18.1
    quay.io/minio/console:v0.18.1
    

    0

    修复此错误的简单解决方案:

    akumar@LNX:/db/dockerfiles/dockerbaseimage#docker pull ubuntu:latest

    守护程序的错误响应:toomanyrequests:您已达到拉取速率限制。您可以通过进行身份验证和升级来增加限制:https://www.docker.com/increase-rate-limit

    解决方案如下:

    akumar@LNX:/db/dockerfiles/dockerbaseimage#docker login --username=ashu1july

    密码:

    警告!您的密码将以未加密的形式存储在/home/akumar/.docker/config.json中。 配置凭据助手以消除此警告。请参见 https://docs.docker.com/engine/reference/commandline/login/#credentials-store

    登录成功


    0
    在我的情况下,我遇到这个错误是因为我连接了公司的VPN,所以看起来我们都是从同一个IP地址访问,并且受到了限制。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接