向GitHub容器镜像仓库(ghcr.io)推送Docker镜像时遇403错误
解决GHCR推送403 Forbidden问题(仓库从个人转组织后)
核心问题
仓库转到组织后,GHCR镜像的命名空间仍沿用个人用户名,导致Workflow尝试推送到你个人名下的GHCR包空间,但当前触发Workflow的GITHUB_TOKEN仅拥有组织仓库的权限,无法操作个人包,因此返回403错误。
具体修复步骤
1. 修正镜像命名空间
修改env中的IMAGE_NAME,将个人用户名替换为组织名:
env: DOCKER_REGISTRY: docker.io GITHUB_REGISTRY: ghcr.io # 把个人用户名替换为组织名 IMAGE_NAME: The-Kernel-Brothers/kernelos_buildtools
同时修正release步骤中GHCR的硬编码标签:
- name: Build and push Docker image on release (GitHub registry) id: build-and-push_release uses: docker/build-push-action@v4.0.0 with: context: . push: ${{ github.event_name != 'pull_request' }} # 标签路径改为组织名 tags: ghcr.io/The-Kernel-Brothers/kernelos_buildtools:latest labels: ${{ steps.meta_github.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max if: ${{ github.event_name == 'release' }}
2. 优化GHCR登录配置
登录GHCR时,无需硬编码组织名,直接使用${{ github.actor }}自动获取触发账号,更灵活:
- name: Log into registry ${{ env.GITHUB_REGISTRY }} if: github.event_name != 'pull_request' uses: docker/login-action@v2.1.0 with: registry: ${{ env.GITHUB_REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }}
3. 确认组织包权限
作为组织管理员,检查以下设置:
- 进入组织的
Settings > Packages,确认允许仓库的Workflow推送包 - 确认当前仓库的Workflow权限中,
packages: write已启用(你的配置里已经设置,此步骤为双重验证)
4. 清理旧个人包(可选)
如果个人GHCR名下有同名的kernelos_buildtools包,建议手动删除,避免路径混淆导致后续问题。
内容的提问来源于stack exchange,提问作者Minionguyjpro
相关产品推荐
相关产品推荐

