You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已认证仍出现GitHub Actions Docker构建403错误求助

解决GHCR拉取私有基础镜像403的问题

针对你遇到的登录GHCR后构建镜像仍报403的问题,以下是几个排查和解决方向:

1. 检查GITHUB_TOKEN的权限配置

默认的GITHUB_TOKEN在GitHub Actions Workflow中权限受限,默认可能没有读取私有Package的权限。你需要在Workflow的job里显式添加权限声明:

jobs:
  build:
    permissions:
      packages: read  # 赋予读取私有包的权限
      contents: read  # 可选,若需要读取仓库内容
    steps:
      - name: Login to docker
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      # 后续构建步骤...

2. 确认基础镜像的访问权限

即使同属一个组织,也要确认ghcr.io/org/app-node这个镜像的权限设置:

  • 镜像是否为私有状态?如果是私有镜像,必须确保执行Workflow的账号(或GitHub Actions服务账号)拥有读取权限。
  • 检查组织的Package权限设置:在GitHub组织的「Packages」页面找到对应镜像,确认是否允许组织成员或Workflow服务账号访问。

3. 排除构建缓存的干扰

构建缓存可能导致认证信息没有正确传递到拉取基础镜像的步骤,可以尝试禁用缓存构建:

- name: Build docker image
  uses: docker/build-push-action@v4
  with:
    context: ./api
    push: true
    tags: ghcr.io/org/app:latest
    no-cache: true  # 禁用缓存,强制重新拉取基础镜像

4. 改用Personal Access Token(PAT)替代默认GITHUB_TOKEN

如果默认的GITHUB_TOKEN权限仍不满足,生成一个拥有packages:read和packages:write权限的PAT:

  1. 在GitHub个人设置中生成PAT,勾选write:packages和read:packages权限。
  2. 将PAT存入仓库的Secrets,命名为GHCR_PAT。
  3. 修改登录步骤的token:
- name: Login to docker
  uses: docker/login-action@v2
  with:
    registry: ghcr.io
    username: ${{ github.actor }}
    password: ${{ secrets.GHCR_PAT }}

内容的提问来源于stack exchange,提问作者lulliezy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 04:32:06