0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker のpull 制限をECR Public使って回避した話

Last updated at Posted at 2025-08-23

はじめに

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への移行で問題を解決した方法と、ハマった落とし穴について共有します。

ポイント :santa:

  • 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 確認) リンク

補足ドキュメント:

2.2 移行手順

まず Node.js ベースイメージを ECR Public (Docker Official Images ミラー) に変更しました。

FROM node:24FROM 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の認証を行う必要がありました。

.github/workflows/test.yml
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への移行完了しました

重要なポイントをまとめると:

  1. ECR Public でも認証必要
  2. aws-region: us-east-1 を忘れない(ECR Public API エンドポイント所在)

現場からは以上です :santa:


参考リンクまとめ

  1. Docker Hub Download rate limit: リンク
  2. Amazon ECR Public service quotas: リンク
  3. Requesting a quota increase (Service Quotas): リンク
  4. Amazon ECR Public endpoints and quotas (General Reference): リンク
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?