Azure Pipeline推送ACR镜像提示本地无对应tag镜像如何解决
Azure Pipeline推送ACR镜像报本地不存在对应tag排查方案
报错信息
执行镜像推送步骤时抛出如下错误:
##[error]An image does not exist locally with the tag: icndpaksacr.azurecr.io/autopipe
报错参考截图:
问题复现配置
当前使用的流水线YAML配置如下:
name: test run jobs: - job: Job_1 displayName: Agent job 1 pool: vmImage: ubuntu-18.04 steps: - checkout: self - task: Docker@0 displayName: Build an image inputs: azureSubscription: 'sc-abc' azureContainerRegistry: loginServer: acr.azurecr.io id: "/subscriptions/4f76bb2f-c521-45d1-b311-xxxxxxxxxx/resourceGroups/eus-abc-rg/providers/Microsoft.ContainerRegistry/registries/acr" imageName: acr.azurecr.io/ims-abc/$(Build.Repository.Name):$(Build.BuildId) - task: Docker@0 displayName: Push an image inputs: azureSubscription: 'sc-abc' azureContainerRegistry: '{"loginServer":"acr.azurecr.io", "id" : "/subscriptions/4f76bb2f-c521-45d1-b311-xxxxxxxxxx/resourceGroups/eus-icndp-rg/providers/Microsoft.ContainerRegistry/registries/acr"}' action: Push an image
根因分析
报错本质是Push步骤查找本地镜像时,指定的tag和实际Build步骤生成的镜像tag不匹配,核心配置错误点有2个:
- Build步骤的
azureContainerRegistry字段YAML缩进错误,loginServer和id没有作为该字段的子属性传入,导致Build步骤没有按预期生成带完整ACR路径的镜像tag - Push步骤未配置
imageName参数,Docker@0任务在Push模式下未显式指定镜像名时,会使用默认命名规则拼接tag查找本地镜像,和Build步骤实际产出的镜像名完全不一致
修复方案
修正YAML缩进,保证Build和Push步骤使用完全一致的镜像全路径(包含仓库地址、命名空间、仓库名、tag),修正后配置参考:
name: test run jobs: - job: Job_1 displayName: Agent job 1 pool: vmImage: ubuntu-18.04 steps: - checkout: self - task: Docker@0 displayName: Build an image inputs: azureSubscription: 'sc-abc' # 修正azureContainerRegistry格式,和Push步骤保持一致 azureContainerRegistry: '{"loginServer":"acr.azurecr.io", "id" : "/subscriptions/4f76bb2f-c521-45d1-b311-xxxxxxxxxx/resourceGroups/eus-abc-rg/providers/Microsoft.ContainerRegistry/registries/acr"}' # 显式指定action为构建,镜像名使用完整路径 action: Build an image imageName: 'acr.azurecr.io/ims-abc/$(Build.Repository.Name):$(Build.BuildId)' - task: Docker@0 displayName: Push an image inputs: azureSubscription: 'sc-abc' azureContainerRegistry: '{"loginServer":"acr.azurecr.io", "id" : "/subscriptions/4f76bb2f-c521-45d1-b311-xxxxxxxxxx/resourceGroups/eus-icndp-rg/providers/Microsoft.ContainerRegistry/registries/acr"}' action: Push an image # Push步骤必须传入和Build步骤完全相同的imageName,确保匹配到本地构建好的镜像 imageName: 'acr.azurecr.io/ims-abc/$(Build.Repository.Name):$(Build.BuildId)'
辅助排查手段
如果修改配置后仍存在tag不匹配问题,可以在Build和Push步骤之间插入临时命令步骤,打印本地所有镜像列表,核对实际生成的镜像tag:
- task: CmdLine@2 displayName: List local docker images inputs: script: 'docker images'
内容的提问来源于stack exchange,提问作者SmartestVEGA
相关产品推荐
相关产品推荐

