将映像推送和拉取到 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'
有人可以帮忙吗?
就我而言,当我遇到这个问题时,简单而干净的解决方案是使用 docker 登录。根据您的情况,这看起来是一个很好的解决方案:
docker login $(acrname)
在致电获取图像之前
docker pull $(acrname)/abc-def:latest
就我而言,docker 登录密码已过期。所以我必须做以下事情:
转到azure并生成用于docker应用程序身份验证的新密码。
复制新生成的密码。
转到运行 docker 的虚拟机。
尝试以下命令
docker 登录 blah.azurecr.io --用户名 your-user-name-here --密码 yourhaspasswordhere~5Crf9b
现在你可以走了。
创建新服务连接的另一种方法是编辑现有服务连接,然后重新保存。这对我多次有效。
您可能还需要通过按重新保存服务连接后首次尝试运行管道时出现的按钮来重新授权管道。