Github ActionsからGitHub Container RegistryにPush出来なかった時の話

Tweet

Github Actionsでビルドした DockerイメージをGithub Container RegistryにPushできなかったときのお話

Github Packageに向いてた

ちょっとややこしいのですがGithub Container RegistryGitHub Packages Docker Registryは別物です。
イメージのタグを docker.pkg.github.com/***/*** にしてて延々にハマりました。
参考ページ

Github Container Registry 有効にしてなかった

GitHub Container Registryはまだパブリックベータ(2021/2/28時点)なので、自分で有効にしないと使えません。
有効にしていないとDocker push時に403 Forbiddenを延々と返されます。
参考ページ

認証トークンにGITHUB_TOKENを使ってた

Github Actions内で利用できるトークンGITHUB_TOKENには*:packagesに関する権限がついていないようです。
そのため、自分でwrite:packagesread:packagesが付与されたトークンを生成し、Secret経由で渡す必要があります。
参考ページ

最終的に動いた設定ファイル

name: Publish Docker image
on:
  push:
    branches:
      - 'main'
jobs:
  push_to_registry:
    name: Push Docker image to GitHub Packages
    runs-on: ubuntu-latest
    env:
      IMAGE_NAME: image-name
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.CR_PAT }} # 自分で生成してSecretに設定したもの
      - name: Push to GitHub Packages
        uses: docker/build-push-action@v2
        with:
          context: .
          file: docker/Dockerfile
          push: true
          tags: |
            ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:latest
            ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:${{ github.sha }}