2020年11月から Docker Hub でログインなしの匿名ユーザからの Pull 回数には IP あたり上限(6 時間あたり 100 回まで)が設けられたため、以下のようなエラーになってしまう場合がある。
Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
これを回避するため、ユーザー認証して Pull する。
参考)
手順
Docker Hub へのアクセストークンを発行する
-
Docker Hub にログインする。
-
Account Settings > Security > Access Tokens から「New Access Token」でアクセストークンを生成する。
-
ユーザー名とアクセストークンを結合して Base64 化する。
DOCKERHUB_USERNAME=(ユーザー名) DOCKERHUB_ACCESS_TOKEN=(アクセストークン) DOCKERHUB_AUTH=$(echo -n "${DOCKERHUB_USERNAME}:${DOCKERHUB_ACCESS_TOKEN}" | base64)
.drone.yml に設定
.drone.yml に image_pull_secrets を記述することで、docker pull 時の認証情報を指定する。(dockerconfig
は Secret 名)
image_pull_secrets:
- dockerconfig
Secrets に認証情報を設定
以下の内容で Secrets に登録する。
-
SecretName: dockerconfig
-
SecretValue
{ "auths": { "https://index.docker.io/v1/": { "auth": "(発行したアクセストークン)" } } }
Secrets に認証情報を設定 (Encrypted Secrets の場合)
OSS 版の場合は Encrypted しか対応していないため、.drone.yml に暗号化して記述する。
-
Drone で暗号化する。
export DRONE_SERVER=https://drone.example.jp export DRONE_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX REPOSITORY_NAME=(設定先リポジトリ名) drone encrypt "${REPOSITORY_NAME}" "{\"auths\":{\"https://index.docker.io/v1/\":{\"auth\":\"${DOCKERHUB_AUTH}\"}}}"
-
暗号化したデータを .drone.yml の Secrets に追記する。
kind: secret name: dockerconfig data: (暗号化した認証情報)