Docker 推送“缺少映像名称”-从 Github Actions 推送到 GCP Artifact Registry 时出错

Mic*_*ael 9 docker google-cloud-platform github-actions google-artifact-registry

我正在 Github 上运行google-github-actions/deploy-cloudrun操作,在尝试将 docker 映像推送到 Artifact Registry 时失败

  1. 我通过身份池进行身份验证
  2. docker镜像构建成功
  3. 但是,将图像推送Google Artifact Registry失败name invalid: Missing image name. Pushes should be of the form docker push HOST-NAME/PROJECT-ID/REPOSITORY/IMAGE

Github 操作 YML

# Authenticate Docker to Google Cloud Artifact Registry
  - name: Docker Auth
    id: docker-auth
    uses: 'docker/login-action@v1'
    with:
      username: 'oauth2accesstoken'
      password: '${{ steps.auth.outputs.access_token }}'
      registry: '${{ env.GAR_LOCATION }}-docker.pkg.dev'

  - name: Build and Push Container
    run: |-
      docker build -t "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}:${{ github.sha }}" .
      docker push "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}:${{ github.sha }}"
Run Code Online (Sandbox Code Playgroud)

日志输出

Successfully built 2edd636b95c7
Successfully tagged us-central1-docker.pkg.dev/[my-project]/github-actions:ecb28fdf92addae09fe6bd9e86033027b2850de3
The push refers to repository [us-central1-docker.pkg.dev/[my-project]/github-actions]
8189f048f482: Retrying in 5 seconds
... multiple retries ...
name invalid: Missing image name. Pushes should be of the form docker push HOST-NAME/PROJECT-ID/REPOSITORY/IMAGE
Error: Process completed with exit code 1.
Run Code Online (Sandbox Code Playgroud)

我确实启用了 ArtifactRegistry,并使用路径创建了存储库us-central1-docker.pkg.dev/[my-project]/github-actions

IAM 角色具有以下权限

  • 工件注册管理员
  • 云运行管理
  • 服务帐户用户

我不知道为什么对于经过身份验证的码头工人来说,注册表似乎不存在。

Mic*_*ael 14

事实证明,上面的符号只是指定HOST-NAME/PROJECT-ID/REPOSITORY:tag而不是指定/IMAGE

将所有出现的内容替换为 eg${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/website:${{ github.sha }}将使用 /website作为存储库中的实际图像名称。


小智 8

我在同样的问题上苦苦挣扎。

添加到上面的答案中,我没有硬编码“/website”,而是更改了原始脚本以将名称添加为变量:

docker build -t "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/${{ env.SERVICE }}:${{ github.sha }}" ./
docker push "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/${{ env.SERVICE }}:${{ github.sha }}"
Run Code Online (Sandbox Code Playgroud)