はじめに
E2Eテストを15分以内に終わらせるために、Playwrightのテストを40個のjobに分割してGitHub Actionsで並列実行していました。Docker Composeを使ってコンテナ内でテストを実行する構成でした。
Error response from daemon: toomanyrequests: You have reached your pull rate limit.
You may increase the limit by authenticating and upgrading
わかってはいたけど制限かかってからでいいかと思っていた(ダメですね)DockerHubのpull制限に、つい引っかかってしまいました。この記事では、ECR Public Repositoryへの移行で問題を解決した方法と、ハマった落とし穴について共有します。
ポイント
- ECR Public は「無制限」ではない(未認証 1 rps / 認証済み 10 rps 初期)
- GitHub Actions での AWS 認証 + ECR Public ログインが重要
- aws regionをus-east-1に指定
1. DockerHub制限の実態
1.1 制限値の詳細
Docker Hub のレート制限(2025-08-23 時点、公式ドキュメントに直近変更なし)は以下:
| プラン | 制限値 |
|---|---|
| 未認証 | 100 pulls/6時間/IP |
| 認証済み無料 | 200 pulls/6時間 |
| Pro/Team | 事実上無制限 |
参考: Docker Hub Download rate limit
2. ECR Publicへの移行
2.1 ECR Publicの仕様
| 認証状態 | レート制限 (Rate of image pulls) | データ転送制限 | 増枠申請 | 備考 |
|---|---|---|---|---|
| 未認証 | 1 pull/秒 | 500GB/月 (未認証利用合計) | 不可 | "Rate of unauthenticated image pulls" (固定) |
| 認証済み | 10 pulls/秒 | 明示クォータなし | 可能 | "Rate of authenticated image pulls" (Service Quotas 増枠可) |
出典: Amazon ECR Public service quotas (2025-08-23 確認) リンク
補足ドキュメント:
- Service Quotas での増枠申請方法: Requesting a quota increase
- ECR Public エンドポイントとクォータ(General Reference): Amazon ECR Public endpoints and quotas
2.2 移行手順
まず Node.js ベースイメージを ECR Public (Docker Official Images ミラー) に変更しました。
FROM node:24
↓
FROM public.ecr.aws/docker/library/node:24
3. 落とし穴:認証設定の必要性
3.1 問題の発生
ECR Publicに移行したのに、またCIが失敗し始めました。
# エラーログ
Error response from daemon: pull rate limit exceeded
3.2 解決方法:AWS認証の設定
GitHub ActionsでECR Publicの認証を行う必要がありました。
name: E2E Tests
on:
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
# 推奨: 将来的には OIDC (role-to-assume) に移行
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1 # ECR Public API は us-east-1
# ECR Publicへのログイン
- name: Login to Amazon ECR Public
id: login-ecr-public
uses: aws-actions/amazon-ecr-login@v2
with:
# Regionも指定
registry-type: public
- name: Pre-warm images (optional)
run: |
docker pull public.ecr.aws/docker/library/node:24
- name: Run tests
run: |
docker-compose run --rm playwright npm test
まとめ
DockerHubのpull制限から、ECR Publicへの移行完了しました
重要なポイントをまとめると:
- ECR Public でも認証必要
aws-region: us-east-1を忘れない(ECR Public API エンドポイント所在)
現場からは以上です ![]()
参考リンクまとめ