Github ActionsからGitHub Container RegistryにPush出来なかった時の話
Github Actionsでビルドした DockerイメージをGithub Container RegistryにPushできなかったときのお話
Github Packageに向いてた
ちょっとややこしいのですがGithub Container Registry
とGitHub 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:packages
とread: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 }}