GitHub Actionsユーザーは今すぐDocker Hubのpull回数制限に備えよう


2021/06/19 追記

こちらのissueへのコメントの通り、本対応は不要になりました。この記事の情報は古いです。

発生する問題

2020年11月より、Docker Hubがログインしていないユーザーに対してPullの回数を制限します。というか、すでに段階的に始まっています。

GitHub Actionsについても、

toomanyrequests: Too Many Requests. Please see https://docs.docker.com/docker-hub/download-rate-limit/

というエラーでDockerイメージのpullに失敗し、ワークフローがエラーになりそうです(私はまだエラーになったことがない)

※ IPアドレスでのrate-limitのため、自分のpull回数に関わらずエラーが起こりえます。

対応策

公式アナウンス(英語)で紹介されている通り、docker/login-actionを使ってみましょう。

対応後のyaml

workflow.yml
jobs:
  HogeHogeJob:
    name: HogeHogeJob
    runs-on: ubuntu-latest
    steps:
      # この5行を追加する
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      # あとは今まで通りで良い
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup python
        uses: actions/setup-python@v2
        with:
          python-version: 3.7

DOCKERHUB_USERNAMEDOCKERHUB_TOKENは、あらかじめsecretsとしてGitHubに登録しておきましょう(公式Doc

注意点として、DOCKERHUB_TOKEN にはパスワードではなくAccess Tokenを使うことが推奨されています。パスワードでも動きますが、ちゃんとAccess Tokenを発行しましょう。

Access Tokenの発行方法

  1. https://hub.docker.com/ にログイン
  2. 右上のユーザー名から Account Settings
  3. Security -> New Access Token -> あとは流れに乗る

発行されたAccess TokenをDOCKERHUB_TOKENとして登録すれば完了。docker/login-actionでログインできるようになります。