已认证仍出现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:
- 在GitHub个人设置中生成PAT,勾选
write:packages和read:packages权限。 - 将PAT存入仓库的Secrets,命名为
GHCR_PAT。 - 修改登录步骤的token:
- name: Login to docker uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GHCR_PAT }}
内容的提问来源于stack exchange,提问作者lulliezy
相关产品推荐
相关产品推荐

