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

vas*_*001 17 amazon-web-services docker dockerfile docker-compose aws-codebuild

当我想使用 CodeBuild 从 CodeCommit 中的 Dockerfile 构建映像时,为什么会发生这种情况?

我收到此错误:

tomanyrequests:您已达到拉取率限制。您可以通过身份验证和升级来增加限制:https : //www.docker.com/increase-rate-limit

Gav*_*inR 26

如果您docker pull在计算机上运行一次,则在随后Dockerfile运行时,它将使用本地副本而不是访问 Docker Hub(并耗尽您的速率限制)。所以对我来说,我运行了一次这个命令:

docker pull ubuntu:18.04
Run Code Online (Sandbox Code Playgroud)

......随后的时间都工作得很好。

或者,通过切换我的位置来切换到AWS 公共 Docker 存储库Dockerfile

FROM ubuntu:18.04
Run Code Online (Sandbox Code Playgroud)

FROM public.ecr.aws/lts/ubuntu:latest
Run Code Online (Sandbox Code Playgroud)

也为我工作。


Suh*_*ote 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
Run Code Online (Sandbox Code Playgroud)

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) 存储库,然后将映像推送到此新存储库中。通过这种方法,您可以通过从 Amazon ECR 存储库拉取映像来避免超出 Docker Hub 拉取限制。

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

FROM python:3.7
Run Code Online (Sandbox Code Playgroud)

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

FROM ${REPO}/python:3.7
Run Code Online (Sandbox Code Playgroud)

PS 我用 3.7 标记 python 图像而不是最新的(默认)

更多细节 -


sam*_*ler 11

尽量不要从 docker hub 拉取镜像,因为 docker 有拉取镜像的限制。

对私有镜像使用ECR(弹性容器注册表), 对公共 docker 镜像使用Amazon ECR 公共库为处理 Docker Hub 速率限制的客户提供的建议,以及即将发布的关于 AWS 处理此问题建议的公告

  • 该建议链接是一个救星。感谢您发布该信息。 (5认同)
  • 感谢你的回答。它拯救了我的一天:) (2认同)

Ami*_*lle 7

一种解决方案是您应该通过以下命令登录docker hub

$ sudo docker login --username=yourUsername
Password:
WARNING: login credentials saved in C:\Users\sven\.docker\config.json
Login Succeeded
Run Code Online (Sandbox Code Playgroud)

有关登录 Docker 的更多帮助

  • 这有帮助。只要确保 sudo 的使用一致即可。 (3认同)
  • 我需要在“buildspec.yml”中定义这些命令吗? (2认同)