ダウンロードレート制限

読む時間の目安: 4 分

Docker Hub におけるダウンロードレート制限とは

Docker Hub 上でプルリクエストを行うユーザーのアカウントタイプに応じて、Docker イメージのダウンロード (「pull」) にはいくつかの制限があります。 現在あるアカウントタイプの違いについては Docker Hub Pricing を参照してください。 Some images are unlimited through our Open Source and Publisher programs.

Unlimited pulls by IP is also available through our Large Organization plan.

制限の定義

ユーザーへの制限というのは、個人アカウントやこれが所属する組織に対しての、最大限の資格を意味します。 これを利用するためには Docker Hub に対して、認証されたユーザーとしてログインしなければなりません。 プルリクエストの認証方法 を参照してください。 認証されていない(匿名)ユーザーは、IP を通じて制限が課せられます。

  • プルリクエストとは、Registry マニフェスト URL(/v2/*/manifests/*)において、最大 2 つのGETリクエストとして定義されています。
  • 通常のイメージプルは、単一のマニフェストリクエストを行います。
  • マルチアーキテクチャーイメージに対するプルリクエストは、2 つのマニフェストリクエストを行います。
  • HEADリクエストは数に含めません。

How do I know my pull requests are being limited

When you issue a pull request and you are over the limit for your account type, Docker Hub will return a 429 response code with the following body when the manifest is requested:

You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limits

You will see this error message in the Docker CLI or in the Docker Engine logs.

How can I check my current rate

Valid manifest API requests to Hub will usually include the following rate limit headers in the response:

ratelimit-limit
ratelimit-remaining

These headers will be returned on both GET and HEAD requests. Note that using GET emulates a real pull and will count towards the limit; using HEAD will not, so we will use it in this example. To check your limits, you will need curl, grep, and jq installed.

To get a token anonymously (if you are pulling anonymously):

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

To get a token with a user account (if you are authenticating your pulls) - don’t forget to insert your username and password in the following command:

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

Then to get the headers showing your limits, run the following:

$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest

Which should return headers including these:

ratelimit-limit: 100;w=21600
ratelimit-remaining: 76;w=21600

This means my limit is 100 per 21600 seconds (6 hours), and I have 76 pulls remaining.

Remember that these headers are best-effort and there will be small variations.

I don’t see any RateLimit headers

If you do not see these headers, that means pulling that image would not count towards pull limits. This could be because you are authenticated with a user associated with a Pro/Team Docker Hub account, or because the image or your IP is unlimited in partnership with a publisher, provider, or an open-source organization.

I’m being limited even though I have a paid Docker subscription

To take advantage of the higher limits included in a paid Docker subscription, you must authenticate pulls with your user account.

A Pro, Team, or a Business tier does not increase limits on your images for other users. See our Open Source, Publisher, or Large Organization offerings.

プルリクエストの認証方法

以下の節では、Docker Hub にログインして、プルリクエストを認証する方法を説明します。

Docker Desktop

Docker Desktop を利用している場合、Docker Desktop メニューから Docker Hub にログインすることができます。

Docker Desktop メニューから Sign in / Create Docker ID をクリックして、画面内の指示に従って、サインイン操作を完了させます。

Docker Engine

Docker Engine のスタンドアロン版を利用している場合は、ターミナル画面からdocker loginコマンドを実行して Docker Hub の認証を取得します。 このコマンドの使い方については docker login を参照してください。

Docker Swarm

Docker Swarm を実行している場合、Docker Hub における認証を得るためには-- with-registry-authフラグを用いる必要があります。 詳しくは docker service create を参照してください。 Docker Compose ファイルを使ってアプリケーションをデプロイしている場合は docker stack deploy を参照してください。

GitHub Action

GitHub の Action を利用して、Docker Hub における Docker イメージのビルドとプッシュを行っている場合は、login action を参照してください。 これとは別の Action を利用している場合、認証と同じようにユーザー名とアクセストークンを追加する必要があります。

Kubernetes

Kubernetes を実行している場合、認証に関する情報は Pull an Image from a Private Registry に示されている手順に従ってください。

サードパーティー製のプラットフォーム

サードパーティー製のプラットフォームを利用している場合は、各プロバイダーから提供される、レジストリ認証を利用する手順に従ってください。

その他の制限

Docker Hub ではアプリケーションやインフラストラクチャーを保護するために、ダウンロードレートの総量制限があります。 この制限は Hub に対するリクエストすべてに適用されるものであり、ウェブページ、API、イメージプルなどを含みます。 制限は IP アドレスごとに行われ、負荷状況などにより時間とともに変化しますが、1 分あたり数千個のリクエスト相当のものです。 レートの総量制限は、アカウントのレベルに関係なく、全ユーザーに等しく適用されます。

この制限が適用されたかどうかは、エラーコードを見ればわかります。 総量制限が適用された場合、単純に429 Too Many Requestsレスポンスが返されます。 プル処理時に発生する制限の場合は、もっと長いエラーメッセージが示され、その中には本ページへのリンクが示されます。

Docker, pull requests, download, limit