GitHub Actions推送镜像至GHCR遇403 Forbidden错误求助
解决GHCR推送403 Forbidden错误
针对你遇到的GitHub Actions推送Docker镜像到GHCR时出现的403错误,以下是几个排查和解决方向:
1. 验证自定义密钥的权限
你使用的GCR_TOKEN需要具备以下权限:
write:packages:允许推送镜像到GHCRrepo:如果镜像关联私有仓库,需要该权限访问代码
确保创建组织级密钥时这些权限已勾选,且密钥作用范围覆盖当前仓库。
2. 修正仓库所有者变量
登录步骤中的username使用${{ secrets.REPO_OWNER }}存在手动配置错误风险,建议直接用GitHub内置变量${{ github.repository_owner }}替代,它会自动获取组织/个人账号名,避免拼写错误:
- name: Login to GHCR uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GCR_TOKEN }}
3. 完善作业权限配置
当前作业仅配置了packages:write,补充contents:read权限(用于代码拉取),确保权限覆盖完整:
jobs: build-and-push: runs-on: ubuntu-latest permissions: contents: read packages: write # 后续步骤不变
4. 尝试使用默认GITHUB_TOKEN
如果组织允许,可直接使用GitHub Actions提供的默认GITHUB_TOKEN替代自定义密钥,它已自动具备对应仓库的权限,无需额外配置:
- name: Login to GHCR uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }}
5. 确认镜像标签格式
检查tags字段是否正确,${{ github.repository }}会自动生成组织名/仓库名格式,最终标签应为ghcr.io/组织名/仓库名:提交SHA,确保没有多余或缺失的字符。
内容的提问来源于stack exchange,提问作者Muhammad Areeb Siddiqui
相关产品推荐
相关产品推荐

