ここ数日、巷で話題になっているDockerHubのDownload rate limitですが、Dockerの公式ホームページでも伝えられている通り、DockerHubの無料ユーザーに対して、レート制限、プルできる回数を6時間で100回への制限が既にスタートされています。

Understanding Docker Hub Rate Limiting

Dockerに挙げられた記事を見てみますと、「Temporary full enforcement window (100 per six hours for unauthenticated requests, 200 per six hours for free accounts): November 4, 9am-12 noon Pacific Time.」とされています。

米国太平表時Pacific Time(PT/PST)と日本標準時間(JTS)との時差は17時間ですので、日本時間の11月5日AM2時からAM5時の間に段階的に制限がかけられるということですので、この記事を書いている段階では既にDockerHubの無料ユーザーに対するレート制限が完了しているということになります。

レートが制限に達してしまった場合

万が一、今回のレート制限の回数にプルが達してしまった場合ですが、次のエラーメッセージが表示されると発表されています。

ERROR: toomanyrequests: Too Many Requests.

または、

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

レート制限を回避する方法

Docker Subscriptions

このレート制限を回避する為には、DockerProまたはTeamにアップグレートする必要があります。どうしても6時間100回のレート制限を外したい場合には、本日の米$/円レートは104円33銭で計算すると521.65円。毎月500円ちょっとの支出をする必要があるようです。

ビルド/デプロイが中断する可能性にご注意を

一応、念の為、、DockerHubの無料ユーザーは、ビルド・デプロイが中断する可能性があるということを理解した上で、ちょっとした注意が必要です。例えば、kubernetes Deployment Manifestで直接DockerHubからイメージをプルしている場合、例えば、「image: hoge:latest」のように記述しているケースがあると、気付かないうちにレート制限の上限に達している可能性がありますので、ご注意ください。

Download rate limitの調べ方

Download rate limitの調べ方は、公式の「Docker docs」に記載されていますので、詳しくは「Docker docs」を確認してもらいたいのですが、手順としましては、

  1. トークンを取得する
  2. curlコマンドで確認する

となります。簡単ですね。「Docker docs」に書いてありますが、自分自身の為に備忘録として、記載しておきます。☺

1.ユーザーアカウントでのトークン取得する

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

2.レート制限をcurlコマンドで確認する

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

3.返ってくる値を読む

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

読み方は、
1行目: 21600=秒=6時間あたりの制限が100回
2行目: RateLimit-Remaining: 76=プルできる回数が残り76回

因みにこのプルできる残りの回数を調べるcurlリクエストですが、1回分のプルを消費したとみなされるようで、プルできる残数が無慈悲にも消費されてしまいますので、注意が必要です。。(;’∀’)