CodeBuild のエラー「toomanyrequests: You have reached your pull rate limit.」を回避するには
困っていた内容
CodeBuild で Docker イメージをビルドしていますが、まれに次のエラーでビルドが失敗します。
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
再試行で成功することもあれば、繰り返し発生することもあります。上限緩和申請が必要でしょうか。
ビルドの失敗を防ぐ方法を教えてください。
どう対応すればいいの?
次のいずれかの方法を検討してください。
- Docker Hub の認証情報を設定する
- ビルドプロジェクトを VPC に接続する
- ECR Public Gallery から取得する
CodeBuild で Docker Hub からイメージ取得を行うと、Docker Hub 側のレート制限でイメージ取得に失敗する場合があります。
2025年1月時点で、Docker Hub の認証情報を設定しない Pull は、IP アドレス毎にレート制限が設定されています。
VPC に接続していない CodeBuild のビルドは、AWS 利用者間で共有される IP アドレスを使用して Docker Hub に接続します。そのため、他の利用者を含む CodeBuild の利用状況によっては、Docker Hub 側のレート制限でエラーが発生します。
回避策としては次の方法があります。なお、AWS 側の上限緩和では対応できませんのでご注意ください。
Docker Hub の認証情報を設定する
Docker Hub の認証情報を設定すると、認証情報毎にレート制限が適用され、また閾値も大幅に緩和されます。
具体的な設定方法は次のドキュメントや弊社ブログを参照してください。
- CodeBuild の「イメージ設定のプルエラー: toomanyrequests」というエラーを解決する | AWS re:Post
- “Too Many Requests.” でビルドが失敗する…。AWS CodeBuild で IP ガチャを回避するために Docker Hub ログインしよう!という話 | DevelopersIO
なお、Docker Hub の認証情報(アカウント)が必要となります。
ビルドプロジェクトを VPC に接続する
ビルドプロジェクトを VPC に接続し、VPC 内の NAT ゲートウェイ等経由で Docker Hub にアクセスすることで、使用する IP アドレスを制御できます。
レート制限は IP アドレス毎となるため、他の利用者の影響を受けず、利用状況のコントロールが可能です。
具体的な設定方法は次のドキュメントを参照してください。
ECR Public Gallery から取得する
Docker Hub で公開されているイメージは ECR Public でも公開されている場合があります。
イメージの Pull 先を Docker Hub から ECR Public に変更することで、Docker Hub 側のレート制限を回避することが可能です。
- Docker | Elastic Container Registry Public
- Docker 公式イメージが Amazon Elastic Container Registry Public で利用可能になりました | Amazon Web Services ブログ
例えばDockerfile
の場合は、次のような修正となります。
# 修正前
FROM alpine:latest
# 修正後
FROM public.ecr.aws/docker/library/alpine:latest
参考資料
Possible cause: If the error message contains "toomanyrequests", and the image is obtained from Docker Hub, this error means the Docker Hub pull limit has been reached.
Recommended solution: Use a Docker Hub private registry, or obtain your image from Amazon ECR. For more information about using a private registry, see Private registry with AWS Secrets Manager sample for CodeBuild. For more information about using Amazon ECR, see Amazon ECR sample for CodeBuild .