Azure DevOps Docker构建任务使用及ACR推送失败求助
Azure DevOps Docker构建推送ACR找不到镜像问题排查
我在Azure DevOps中使用Docker@2任务构建Node.js示例应用的Docker镜像,尝试打标签后推送至Azure ACR,但推送时提示找不到镜像。以下是我的配置片段、构建输出及报错信息,请问遗漏了什么?
现有Docker构建任务配置
task: Docker@2 displayName: Build an image inputs: command: build repository: azac/myapp Dockerfile: $(Build.SourcesDirectory)/Dockerfile tags: latest
构建输出与报错信息
REPOSITORY TAG IMAGE ID CREATED SIZE azac/myapp latest 22ad073063a9 23 seconds ago 133MB node 18 37b4077cbd8a 12 days ago 997MB node 18-alpine f520ad35ba68 12 days ago 175MB moby/buildkit latest 477ce8a5e273 2 weeks ago 168MB node 14 cedb9f0d0498 2 weeks ago 912MB node 16 9e98bbbbe8e1 2 weeks ago 910MB ubuntu 20.04 61c45d0e9798 2 weeks ago 72.8MB buildpack-deps buster dd092f9559e9 2 weeks ago 803MB buildpack-deps bullseye 7f6175124be9 2 weeks ago 834MB ubuntu 22.04 74f2314a03de 2 weeks ago 77.8MB debian 10 f03c282363a3 2 weeks ago 114MB debian 11 72b624312240 2 weeks ago 124MB ubuntu 18.04 b89fba62bc15 2 weeks ago 63.1MB node 16-alpine fa7e19c4371c 3 weeks ago 117MB node 14-alpine 4802e63f08a5 4 weeks ago 119MB alpine 3.14 6dff1269bc79 5 weeks ago 5.61MB alpine 3.15 5ce65d7b0fde 5 weeks ago 5.59MB alpine 3.16 dfd21b5a31f5 5 weeks ago 5.54MB Login Succeeded Error response from daemon: No such image: myapp:latest The push refers to repository [azac.azurecr.io/myapp] An image does not exist locally with the tag: azac.azurecr.io/myapp
参考的AzureCLI推送任务配置
task: AzureCLI@2 inputs: azureSubscription: 'azdo Service Connetion' scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | docker images az acr login --name azac docker tag myapp azac.azurecr.io/myapp:latest docker push azac.azurecr.io/myapp:latest
问题原因与解决方法
核心问题
Docker@2任务构建的镜像标签是azac/myapp:latest,但AzureCLI任务中尝试给myapp:latest打标签——本地根本不存在这个无前缀的镜像,因此触发“找不到镜像”的报错。
修复方案1:修正AzureCLI中的标签命令
将docker tag命令里的源镜像名改为构建生成的正确名称:
docker tag azac/myapp:latest azac.azurecr.io/myapp:latest
修复方案2:用Docker@2一步完成构建+推送(更推荐)
直接使用Docker@2任务的buildAndPush命令,无需拆分任务,自动处理登录、构建、打ACR标签、推送全流程,避免标签不一致问题:
task: Docker@2 displayName: Build and push image to ACR inputs: command: buildAndPush containerRegistry: '你的Azure ACR服务连接名称' repository: myapp Dockerfile: $(Build.SourcesDirectory)/Dockerfile tags: latest
注:需要提前在Azure DevOps中配置好指向目标ACR的服务连接,任务会自动利用该连接完成登录操作。
内容的提问来源于stack exchange,提问作者cloudcop
相关产品推荐
相关产品推荐

