从Github注册表使用Docker镜像未经授权

16
  • 我本地创建了Docker镜像
  • 为Github Docker注册表标记了它
  • 将其推送到Github Docker注册表

现在我想在Github操作中使用它来创建FROM字段的Docker镜像,但它总是失败并显示unauthorized错误-为什么?

以下是步骤:

docker tag my_image:1.0 ghcr.io/<github_user>/<organization>/<repo_name>/my_image:1.0

docker push ghcr.io/<github_user>/<organization>/<repo_name>/my_image:1.0
a4f566342e89: Pushed
0378d9143186: Pushed
...
f337026e7d90: Pushed

你所看到的所有内容都已成功完成,我甚至可以在我的电脑上使用 docker pull 进行拉取。

然后我设置了 Github action 并将其设置为启动 Powershell 脚本,该脚本从此 Dockerfile 创建 Docker 镜像:

因此,Github action 的设置如下:

...
...
jobs:

  build:

    runs-on: windows-2019

    steps:
    - uses: actions/checkout@v2
    - name: Package with Docker and push to Github packages
      id: build_and_push_docker_image    
      env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}    
      run: |
        src/database/base-image/github-build.ps1

只需要一个步骤!

Powershell脚本本身会执行以下操作:

...
docker login ghcr.io --username $env:GITHUB_ACTOR --password $env:GITHUB_TOKEN
...
docker build src/database/base-image --file "src/database/base-image/databaseCreateBaseImage.Dockerfile" --tag sqldatabase/base:$VERSION
...
...

Docker文件如下:

FROM ghcr.io/<github_user>/<organization>/<repo_name>/my_image:1.0

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

...
...

不幸的是,当 Github Action 运行时,它总是在 FROM 行失败,并显示以下错误信息:

Step 1/7 : FROM ghcr.io/<github_user>/<organization>/<repo_name>/my_image:1.0
Get https://ghcr.io/v2/<github_user>/<organization>/<repo_name>/my_image/manifests/1.0: unauthorized
...
...

也许有人能够提供一些帮助-为什么不被授权 pull 这个镜像?一切都在这个 FROM 行之前没有出现错误 :(


我今天遇到了类似的问题,解决方法是进入包设置,将包的可见性设置为 public,因为默认情况下它是私有的,即使你的 repo 是公开的。 - tim
4个回答

10

这帮助了我:

echo '<my_token>' | docker login ghcr.io -u <my_username> --password-stdin
< p > < em ><my_token> 是来自 Github 的 PAT。


6

我的错误

根据Github文档《认证到GitHub Packages》,仅使用GITHUB_TOKEN不够的。如果您想要使用Github注册表(ghcr.io),您必须使用个人访问令牌。


是的,可以使用手册 https://docs.github.com/en/packages/learn-github-packages/about-github-packages#authenticating-to-github-packages - user5248982
或者你可以将该包公开吗?https://niklasmtj.de/blog/gh-actions-workflows-combination-with-ghcr - Oliver Angelil

4

确保 GitHub Actions 可以访问 Docker 镜像(就像 @sihil 提到的那样),并将以下步骤添加到您的作业中:

- name: Login to GitHub Container Registry
  uses: docker/login-action@v2
  with:
    registry: ghcr.io
    username: ${{ github.actor }}
    password: ${{ secrets.GITHUB_TOKEN }}

1
docker/login-action@v2 - evgnomon

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接