GitHub Action跨私有仓库从ghcr.io拉取镜像提示denied的原因
问题原因及解决办法
核心原因:默认GITHUB_TOKEN权限受限
GitHub Actions自动生成的${{ secrets.GITHUB_TOKEN }}仅拥有当前仓库(仓库B)的读写权限,无法访问同组织下其他私有仓库(仓库A)的资源,包括存放在仓库A的GHCR镜像。
解决步骤
1. 配置工作流权限
在仓库B的GitHub Actions工作流文件中,添加permissions配置,明确授予包读取权限:
jobs: 你的任务名称: permissions: packages: read steps: - name: Log in to GitHub Container Repository run: | echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin - name: Pull the image run: | docker pull ghcr.io/org/a:latest
2. 给仓库B开放仓库A镜像的访问权限
进入仓库A对应镜像的设置页面(GHCR中ghcr.io/org/a的Package settings):
- 找到「Manage access」选项
- 添加仓库B的仓库主体(搜索
org/B)或组织内的团队,授予「Read」权限
3. 备选方案:使用个人访问令牌(PAT)
如果上述配置仍无法解决,可创建拥有包读取权限的PAT:
- 在GitHub个人设置中生成PAT,勾选
read:packages权限 - 将PAT添加到仓库B的Secrets(命名为
GHCR_PAT) - 修改登录命令:
- name: Log in to GitHub Container Repository run: | echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
内容的提问来源于stack exchange,提问作者jumpo marketing
相关产品推荐
相关产品推荐

