GitHub Actions推送Docker镜像至ghcr.io遇权限拒绝问题求助
解决GitHub Actions推送GHCR镜像权限拒绝问题
问题场景
尝试通过GitHub Actions将Docker镜像推送到GitHub Container Registry(ghcr.io)时,出现权限拒绝错误:
#10 ERROR: denied: installation not allowed to Write organization package ------ > pushing ghcr.io/michaellihs/texlive:latest with docker: ------ ERROR: denied: installation not allowed to Write organization package Error: buildx call failed with: ERROR: denied: installation not allowed to Write organization package
已完成的前置操作:
- 创建了具备包读写删权限的GitHub个人访问令牌(PAT)
- 本地通过PAT成功推送镜像至ghcr.io
- 在包设置页面将工作流所在仓库添加为Actions Access并赋予admin角色
解决方案
1. 将自定义PAT添加到工作流仓库的Secrets
- 打开工作流所在仓库的Settings页面
- 进入Secrets and variables > Actions
- 点击New repository secret,名称设为
CR_PAT,值填入你之前创建的PAT
2. 修改GitHub Actions工作流配置
修改登录步骤的参数,替换默认的GITHUB_TOKEN为自定义的CR_PAT,同时修正registry格式:
name: ci on: push: branches: - 'main' jobs: build-and-push-image: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Log in to the Container registry uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 with: registry: ghcr.io # 移除https://前缀 username: ${{ github.actor }} password: ${{ secrets.CR_PAT }} # 替换为自定义PAT的Secret名称 - name: Build and push Docker image uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc with: context: image/ push: true tags: ghcr.io/michaellihs/texlive:latest
3. 验证PAT权限
确保你的PAT拥有以下权限:
write:packages:允许推送包read:packages:允许拉取包delete:packages(可选):允许删除包workflow:允许在工作流中使用该令牌
关键说明
默认的GITHUB_TOKEN是仓库范围的令牌,对于用户个人托管的GHCR包,即使在包设置中添加了仓库的Actions Access,该令牌仍无法获得写入权限。使用具备包权限的自定义PAT是解决这类权限问题的可靠方式。
内容的提问来源于stack exchange,提问作者Michael Lihs
相关产品推荐
相关产品推荐

