在 github 工作流程中构建和推送 docker 时,GITHUB_TOKEN 权限被拒绝写入包

bil*_*ani 20 github docker-registry github-actions

我有一个 Github 组织,并尝试将容器注册表从 迁移docker hubGitHub Packages. 通过使用 Github Workflows,这是我用来将 docker 推送到的 yaml GitHub Packages

name: ghcr_test
on:
  push:
    branches:
      - dev

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Login to GitHub Packages
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push Docker image
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
Run Code Online (Sandbox Code Playgroud)

GitHub 建议在操作工作流程中使用 GITHUB_TOKEN,我已经仔细检查了它在我的组织设置中是否具有读写权限,但他们给了我这个错误

Error: buildx failed with: error: denied: permission_denied: write_package
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

sih*_*hil 22

我认为你可能需要在这里做两件事:

  • 首先,确保包设置(包页面的右下角)允许访问相关存储库中运行的操作
  • 其次,确保你的job中已经添加了package权限

第二个涉及将此代码段添加到您的工作流程作业中(请注意,如果您仅拉取容器,则可以读取此权限):

    permissions:
      packages: write
Run Code Online (Sandbox Code Playgroud)

在您的工作流程中:

name: ghcr_test
on:
  push:
    branches:
      - dev

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      packages: write
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Login to GitHub Packages
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push Docker image
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: ghcr.io/${{ github.repository }}:${{ github.sha }}
Run Code Online (Sandbox Code Playgroud)

我遇到了类似的问题,最终偶然发现了该许可,突然一切都开始工作了。希望它也适合你。

  • 是的,分叉存储库的默认设置似乎是“读取”,因此要使工作流程在分叉存储库中工作,必须将其设置为“写入”。请参阅 https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token= (2认同)

小智 6

我已经成功修复了 403 错误并与 GITHUB_TOKEN 保持一致。

\n

从您的组织 github 主页面 \xe2\x86\x92 软件包 \xe2\x86\x92 $yourPackage \xe2\x86\x92 软件包设置 \xe2\x86\x92 \xe2\x80\x9c管理操作访问 \xe2\x80\x9d 部分

\n

将具有写入权限的 git 存储库与此包/docker 存储库连接起来

\n

https://github.com/orgs/community/discussions/26274#discussioncomment-3251137

\n


Von*_*onC 5

检查这是否与操作/跑步者问题 1039有关

似乎 GITHUB_TOKEN 仅适用于默认分支...在 PR 分支上运行时需要使用自定义 PAT

另请检查这是否与此讨论类似:

事实证明,另一个组织成员推送了同一个包,该包默认是私有的,并且由该组织成员拥有。
由于没有其他人能够看到该包的存在,我们感到非常困惑。

我认为新包的默认行为由用户上传私有,甚至组织所有者也不可见,这是相当令人困惑的。

如果没有,请尝试按照此处所述手动进行推送,以验证您的令牌(使用 a docker login -u USERNAME -p TOKEN ghcr.io,然后使用 a docker push)。GitHub 操作可能会起作用。