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

Jas*_*per 18 docker github-actions

  • 我在本地创建了 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
Run Code Online (Sandbox Code Playgroud)

如您所见,一切都成功完成,我什至可以docker pull在我的计算机上完成

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

所以Github动作设置为:

...
...
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
Run Code Online (Sandbox Code Playgroud)

只需 1 步!

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
...
...
Run Code Online (Sandbox Code Playgroud)

Docker 文件是:

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

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

...
...
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,当 Github 操作运行时,它总是在线失败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
...
...
Run Code Online (Sandbox Code Playgroud)

也许有人可以透露一些信息 - 为什么它没有获得pull该图像的授权?一切都运行没有错误,直到这一FROM行:(

小智 14

这帮助了我:

echo '<my_token>' | docker login ghcr.io -u <my_username> --password-stdin
Run Code Online (Sandbox Code Playgroud)

<my_token> 是来自 Github 的 PAT


Jas*_*per 6

我的错

根据 Github 文档,使用GitHub Packages 进行身份验证 还不够(!)。如果您想使用 Github 注册表 (ghcr.io),您必须(!)使用您的个人访问令牌。GITHUB_TOKEN