ここ数日、巷で話題になっているDockerHubのDownload rate limitですが、Dockerの公式ホームページでも伝えられている通り、DockerHubの無料ユーザーに対して、レート制限、プルできる回数を6時間で100回への制限が既にスタートされています。
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.
レート制限を回避する方法
このレート制限を回避する為には、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」を確認してもらいたいのですが、手順としましては、
- トークンを取得する
- 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回分のプルを消費したとみなされるようで、プルできる残数が無慈悲にも消費されてしまいますので、注意が必要です。。(;’∀’)