簡體   English   中英

toomanyrequests:您已達到拉取率限制。 您可以通過身份驗證和升級來增加限制

[英]toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading

當我想使用 CodeBuild 在 CodeCommit 中從 Dockerfile 構建圖像時,為什么會發生這種情況?

我收到此錯誤:

toomanyrequests:您已達到拉取率限制。 您可以通過認證和升級來增加限制: https://www.docker.com/increase-rate-limit

盡量不要從 docker 集線器拉取圖像,因為 docker 對拉取圖像有限制。

ECR(Elastic Container Registry)用於私有映像,將Amazon ECR Public Gallery用於公共 docker 映像。 針對處理 Docker 集線器速率限制的客戶的建議,以及即將發布的 AWS 處理此建議的公告。

如果您在機器上運行docker pull _____一次,則在隨后運行Dockerfile時,它將使用本地副本而不是達到 Docker 集線器(並使用您的速率限制)。 所以對我來說,我一次性運行了這個命令:

docker pull ubuntu:18.04

......后來它工作得很好。

或者,通過將我的Dockerfile從以下位置切換到AWS 公共 Docker 存儲庫

FROM ubuntu:18.04

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

也為我工作。

一種解決方案是您應該通過以下命令登錄docker 集線器

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

關於登錄的更多幫助 Docker

如果 Amazon ECR 公共庫不提供所需的圖像,則也可以選擇將圖像從 Docker 集線器復制到私有 ECR 注冊表。

例如, Skopeo可以做到這一點。 此代碼段將您的私有注冊表與 Docker 集線器同步:

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/

就我而言,Docker 登錄沒有問題。 我能夠通過docker pull nginx下載 docker 圖像。 但是,當我嘗試使用上面的圖像創建一個 k8s pod 時,我收到了這個錯誤:

您已達到拉取率限制。 您可以通過身份驗證和升級來增加限制

這就是我by creating a private docker registry來解決此問題的方法:

創建並運行私有 docker 注冊表

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

從公共 docker 集線器下載 nginx 圖像

docker pull nginx

在將 nginx 推送到私有注冊表之前為其創建一個標簽

docker tag nginx localhost:5000/nginx

推送到注冊表

docker push localhost:5000/nginx

最后成功創建了一個 Pod,也擺脫了這個問題。

您可以付費以獲得更多嘗試,也可以使用其他替代方法,例如 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

為什么?

當您在達到 Docker 拉取速率限制后嘗試從公共 Docker Hub 存儲庫中拉取圖像時,會出現此錯誤。 Docker Hub 使用 IP 地址對用戶進行身份驗證,拉取率限制基於各個 IP 地址。

  • 對於匿名用戶,速率限制設置為每個 IP 地址每 6 小時 100 次拉取。
  • 對於具有 Docker ID 的經過身份驗證的用戶,拉取率設置為每 6 小時 200 次拉取。
  • 如果您的圖像拉取請求超過這些限制,這些請求將被拒絕,直到六小時 window 過去。

無論請求的映像是否是最新的,每個 docker 拉取命令的執行都會計入您的配額。 如果您將應用程序堆棧部署到集群,則達到請求限制是小菜一碟。

解決方案:

1. 將 Amazon ECR 公共注冊表用於公共容器映像

您可以通過從 Amazon ECR 公共注冊表中提取圖像來避免達到 Docker 集線器的速率限制。 Amazon ECR 公共注冊表包含流行的基礎映像,包括操作系統、AWS 發布的映像。

例如

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

2.訂閱Docker集線器

這將允許您增加對經過身份驗證的用戶的拉取限制,並使其對匿名用戶無限制。 如果您是個人或 2-10 人的小團隊,只需要一個空間來存儲圖像,那么每個用戶每月支付 5 到 7 美元是最簡單的解決方案。

3. 鏡像到您自己的注冊表

乍一看,從 Docker 集線器鏡像或復制圖像到您自己的注冊表似乎有點矯枉過正。 但是,它在安全性和治理方面有兩個主要好處,並且被認為是最佳實踐,尤其是在企業環境中使用容器時。

4. 代理到 Docker 集線器

第三個選項與選項 #2 非常相似,但不需要復制規則。 然而,您可以獲得安全和治理的相同好處。 在這種情況下,您將創建一個所謂的代理緩存項目,該項目將自動存儲您上次使用的圖像。 以后可以從代理緩存中提取它們而無需觸及 Docker 集線器限制。

解決方法(為我工作)

5. 將公共映像復制到 Amazon ECR 私有注冊表中

創建一個 Amazon Elastic Container Registry (Amazon ECR) 存儲庫,然后將映像推送到這個新存儲庫中。 使用這種方法,您可以通過從 Amazon ECR 存儲庫中拉取圖像來避免超出 Docker 集線器拉取限制。

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

FROM python:3.7

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

FROM ${REPO}/python:3.7

PS我用3.7而不是最新的(默認)標記了python圖像

更多細節 -

修復此錯誤的簡單解決方案:

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

來自守護程序的錯誤響應:太多請求:您已達到拉取率限制。 您可以通過認證和升級來增加限制: https://www.docker.com/increase-rate-limit

解決方案將是:

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

密碼:

警告。 您的密碼將以未加密的方式存儲在 /home/akumar/.docker/config.json 中。 配置憑據幫助程序以刪除此警告。 請參閱https://docs.docker.com/engine/reference/commandline/login/#credentials-store

登錄成功

如果您要從 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
  1. 列出 docker 圖像
docker images
REPOSITORY                                                         TAG             IMAGE ID       CREATED         SIZE
amazoncorretto                                                     11-alpine       e9ae3c220b23   7 weeks ago     325MB
  1. 獲取 IMAGE 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM