現在の Docker プルレートの制限とステータスの確認

November 2024 update: Learn about the upgraded Docker plans and choose the best ドッカーサブスクリプション for you. Simpler, more value, better development and productivity.

Read our Docker Desktop release collection to learn about our latest enhancements and innovations.

使用量ベースの制限への移行を継続すると、2020 年 11 月 2 日から、Docker サブスクリプションの各レベルでコンテナー イメージの Docker プルの新しい レート制限 がお客様に表示されます。 

匿名の無料ユーザーは6時間あたり100プルに制限され、認証された無料ユーザーは6時間あたり200プルに制限されます。 Docker Pro および Team サブスクライバーは、数量が過剰または乱用でない限り、制限なしに Docker Hub からコンテナー イメージをプルできます。 Docker Pro と Team のサブスクライバーは、24 時間で最大 50,000 回のプルを Docker Hub からコンテナー イメージをプルできます。

この記事では、いくつかのコマンドラインツールを使用して、現在レート制限ポリシー内のどこに当てはまるかを判断する方法について説明します。

現在のレート制限の決定

Docker Hub へのリクエストでは、制限にカウントされるリクエストの応答ヘッダーにレート制限情報が含まれるようになりました。 これらの名前は次のように付けられます。

  • レート制限-制限    
  • レート制限-残り

ヘッダーには RateLimit-Limit 、6 時間以内に実行できるプルの合計数が含まれています。 ヘッダーには RateLimit-Remaining 、6 時間のローリング ウィンドウの残りのプル数が含まれています。 

ターミナルを使用してこれらのヘッダーを見てみましょう。 ただし、Docker Hub に要求を行う前に、ベアラー トークンを取得する必要があります。 次に、curl を使用して特定の画像に要求を行うときに、このベアラートークンを使用します。

匿名の要求

まず、匿名リクエストの制限を見つけることを見てみましょう。 

次のコマンドは、ratelimitpreview/テスト・イメージの認証トークンを auth.docker.io 要求し、そのトークンを という名前の TOKEN環境変数に保存します。 認証されたリクエストの場合のようにユーザー名とパスワードを渡さないことに気付くでしょう。

$ TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)

TOKENこれで、 をデコードして、中身を確認できます。これを行うには、 jwt ツールを使用します。 にあるオンラインツールに貼り付け TOKEN ることもできます jwt.io

$ jwt decode $TOKEN
Token header
------------
{
  "typ": "JWT",
  "alg": "RS256"
}

Token claims
------------
{
  "access": [
    {
      "actions": [
        "pull"
      ],
      "name": "ratelimitpreview/test",
      "parameters": {
        "pull_limit": "100",
        "pull_limit_interval": "21600"
      },
      "type": "repository"
    }
  ],
  ...
}

Token header セクションの下に、 と pull_limit pull_limit_intervalが表示されます。これらの値は、匿名ユーザーとしてのユーザーと、要求されているイメージに関連しています。 上記の例では、が pull_limit 100に設定され、が pull_limit_interval 制限の秒数である21600に設定されていることがわかります。

次に、テスト画像をリクエストし、 ratelimitpreview/test上からを渡 TOKEN します。

$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1 | grep RateLimit

< RateLimit-Limit: 100;w=21600
< RateLimit-Remaining: 96;w=21600

出力は、JWTの出力で見たように、 RateLimit-Limit 6時間ごとに100プルに設定されていることを示しています。 また RateLimit-Remaining 、この値は、6時間のローリングウィンドウで残りのプルが96個あることを示していることがわかります。 この同じ curl コマンドを複数回実行すると、 RateLimit-Remaining 値が減少します。

認証された要求

認証されたリクエストの場合は、認証されたトークンに更新する必要があります。 以下のコマンドで、必ず Docker ID とパスワードに置き換え username:password てください。

$ TOKEN=$(curl --user 'username:password' "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)

以下は、取得したばかりのデコードされたトークンです。

$ jwt decode $TOKEN
Token header
------------
{
  "typ": "JWT",
  "alg": "RS256"
}

Token claims
------------
{
  "access": [
    {
      "actions": [
        "pull"
      ],
      "name": "ratelimitpreview/test",
      "parameters": {
        "pull_limit": "200",
        "pull_limit_interval": "21600"
      },
      "type": "repository"
    }
  ],
  ...
}

認証されたJWTには匿名JWTと同じフィールドが含まれていますが、 pull_limit 値は認証された空きユーザーの制限である200に設定されています。

認証されたトークンを使用してイメージをリクエスト ratelimitpreview/test しましょう。

$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1 | grep RateLimit

< RateLimit-Limit: 200;w=21600
< RateLimit-Remaining: 176;w=21600

値は RateLimit-Limit 6 時間あたり 200 に上昇し、残りのプルは次の 6 時間で 176 であることがわかります。 匿名要求の場合と同様に、この同じ curl コマンドを複数回実行すると、 RateLimit-Remaining 値が減少します。

エラー メッセージ

Docker のプル レート制限に達すると、結果の応答には http 状態コード 429 が含まれ、次のメッセージが含まれます。

HTTP/1.1 429 Too Many Requests
Cache-Control: no-cache
Connection: close
Content-Type: application/json
{
  "errors": [{
      "code": "TOOMANYREQUESTS",
      "message": "You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit"
  }]
}

結論

この記事では、認証されたユーザーか匿名ユーザーかに基づいて、許可されるイメージプルの数を決定する方法について説明しました。 匿名の無料ユーザーは6時間あたり100プルに制限され、認証された無料ユーザーは6時間あたり200プルに制限されます。 レート制限を完全に回避したい場合は、ProまたはTeamサブスクリプションを購入またはアップグレードできます:サブスクリプションの詳細とアップグレード情報は https://docker.com/pricing で入手できます。

詳細と一般的な質問については、 ドキュメントページFAQをお読みください。 そしていつものように、Twitter(@docker)または直接私(@pmckee)でお気軽にご連絡ください。

Docker の使用を開始するには、無料の Docker アカウントに サインアップして、 スタート ガイドをご覧ください。