将 Docker 映像任务拉取和推送到 ACR 在 Azure Devops Pipeline 中失败“未经授权:无效的 clientid 或客户端密钥。”

问题描述 投票:0回答:4

将映像推送和拉取到 Azure DevOps 管道中的 Azure 容器注册表任务失败。当尝试从本地系统拉取或推送时,没有问题,但当尝试使用 Azure Devops 管道执行此操作时,则会失败。 Docker 登录成功,但当我想从 ACR 中提取镜像时失败,结果如下:

**Error response from daemon: Head "***/a2/abcd/manifest/latest": unauthorized: Invalid clientid or client secret. 

##[error]Bash exited with code '1'.
##[debug]Processed: ##vso[task.issue type=error;]Bash exited with code '1'. 

我检查了 Az Devops 中的所有服务连接,它们看起来都配置正确。还检查了关联的服务主体是否具有

AcrPull
AcrPush
权限,所有权限均已到位。只是不明白出了什么问题。

我的 Yaml 看起来像这样:

trigger: none
schedules:
- cron: "0 0 0 * *"
  displayName: ****  *
  branches:
    include:
    - abcd
  always: true

pool:
  vmImage: 'ubuntu-latest'

variables:
- name: acrname
  value: *****.azurecr.io


stages:
- stage: abcd
  displayName: "pull images from acr"
  jobs:
  - job: abcdef
    displayName: "abcdef"
    pool:
      vmImage: ubuntu-latest
    steps:
      - task: Docker@2
        displayName: Login to ACR
        inputs:
          command: login
          containerRegistry: '*****.azurecr.io'
          

      - bash: |
            docker pull $(acrname)/abc-def:latest
            docker pull $(acrname)/igh-jkl:latest
        name: pull
        displayName: 'pull acr images'

有人可以帮忙吗?

azure docker yaml azure-pipelines acr
4个回答
11
投票
  1. 我也遇到了同样的问题,ACR 服务连接已过期。所以我必须使用这些步骤创建一个新的服务连接。

  1. Docker ID 和 Docker 密码可以从 ACR --> 设置 --> 访问密钥获取

  1. 使用这个新的服务连接更新您的管道,您就可以开始了。如果此解决方案对您有帮助,请评分。

1
投票

就我而言,当我遇到这个问题时,简单而干净的解决方案是使用 docker 登录。根据您的情况,这看起来是一个很好的解决方案:

docker login $(acrname)

在致电获取图像之前

docker pull $(acrname)/abc-def:latest

0
投票

就我而言,docker 登录密码已过期。所以我必须做以下事情:

  1. 转到azure并生成用于docker应用程序身份验证的新密码。

  2. 复制新生成的密码。

  3. 转到运行 docker 的虚拟机。

  4. 尝试以下命令

    docker 登录 blah.azurecr.io --用户名 your-user-name-here --密码 yourhaspasswordhere~5Crf9b

  5. 现在你可以走了。


0
投票

创建新服务连接的另一种方法是编辑现有服务连接,然后重新保存。这对我多次有效。

您可能还需要通过按重新保存服务连接后首次尝试运行管道时出现的按钮来重新授权管道。

© www.soinside.com 2019 - 2024. All rights reserved.