2020年11月1日から、Docker Hubは匿名からのPullに対しては回数制限するという話に。
この話で、CircleCI側もドキュメントを用意してくれている。
2020年11月1日から、Docker Hub で匿名ユーザーに対する発信元 IP に基づいたプル回数制限が導入されます。運用中のサービスでの混乱を避けるために、Docker Hub から認証付きでプル操作を行うようにすることをお勧めします。認証は設定ファイルで行えます(Docker の認証付きプルの使用を参照)。
CircleCI内でDocker HubからPullしているコンテナがいくつかあるので、対応する。
Docker HubアカウントでPullする
匿名に対しての制限なので、たとえDocker HubアカウントがFreeプランだったとしても認証を通せば200Pull/6時間になる(匿名は100Pull)。
※当たり前だけど課金すれば無制限にできる。
課金してあげたいところだが、一旦はFreeプランのアカウントとしてPullするように変更する。
なお一連の流れはCircleCIのDISCUSSにも記載されている。
Dockerを使用している箇所にauth設定を入れる
例えばこのような設定があったとする。
executors: defaults: docker: - image: redis:4.0 - image: mongo:3.6.17
ここにauthの設定を組み込む。
docker_hub_auth: &docker_hub_auth auth: username: $DOCKERHUB_USER password: $DOCKERHUB_PASSWORD executors: defaults: docker: - image: redis:4.0 <<: *docker_hub_auth - image: mongo:3.6.17 <<: *docker_hub_auth
$DOCKERHUB_USER
と$DOCKERHUB_PASSWORD
は環境変数としてCircleCIのProject settings - Environment Variablesに登録した。
実行→Jobが正常終了すればOK
まずローカルでconfig.ymlのSyntaxを確認しつつ……。
$ circleci config validate -c .circleci/config.yml Config file at .circleci/config.yml is valid.
問題ないのでPushしてテストが通るか確認した。
認証ができているのか確認できない?
CircleCIにてアプリケーションテストのJobを実行(Pullするコンテナイメージはテストで使っていたため)したところ、
テストは無事合格したが、肝心の認証がされてPullしてきたのかわからない。
カスタマーサポートに問い合わせたところ*1、「ビルドが完了すれば認証ができていると考えて良いです」と回答をいただいた。
今後開発が進んで、ログで見れるようになるということなのでそこは楽しみに待っていよう。
ということで認証設定を追加して問題なく動いたら、Pull制限対応は完了なり。
参考
*1:10秒くらいで担当者アサインされた