You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipelines本地构建Docker镜像A、B不推ACR报错求助

问题描述

我有容器镜像A,以及基于A扩展的镜像B,想用Azure Pipeline构建二者后通过Docker Compose运行,要求不推送镜像到Azure容器注册表(ACR),仅用Pipeline的本地构建上下文操作。但构建镜像B时出现错误:

Step 1/17 : FROM azure.repo.xxx/A:1.0.0
manifest for azure.repo.xxx/A:1.0.0 not found: manifest unknown: manifest tagged by "1.0.0" is not found

当前Pipeline任务配置如下:

- task: Docker@2
  displayName: Build docker image A
  inputs:
    command: build
    containerRegistry: 'azure.acr'
    buildContext: '$(Pipeline.Workspace)'
    arguments: '--build-arg REPO_PATH=azure.repo.xxx --build-arg IMG_NAME=azure.repo.xxx/A:1.0.0'
    dockerfile: 'A/Dockerfile'
- task: Docker@2
  displayName: Build docker image B
  inputs:
    command: build
    containerRegistry: 'azure.acr'
    buildContext: '$(Pipeline.Workspace)'
    arguments: '--build-arg IMG_NAME=azure.repo.xxx/B:1.0.0'
    dockerfile: 'B/Dockerfile'
问题原因
  • 构建镜像A时,给镜像打的标签是azure.repo.xxx/A:1.0.0(带ACR仓库前缀),Docker会默认认为这是远程仓库的镜像标签
  • 构建镜像B时,Dockerfile里的FROM azure.repo.xxx/A:1.0.0会触发Docker去ACR远程拉取该镜像,而非使用本地刚构建好的镜像A
  • 配置中的containerRegistry: 'azure.acr'让Docker任务默认关联远程ACR,进一步强化了去远程查找的行为
解决方案

核心思路:给本地构建的镜像A打不带ACR前缀的本地标签,让Docker在构建B时优先使用本地镜像,而非远程仓库。

步骤1:修改镜像A的构建任务

移除ACR关联配置,给镜像打纯本地标签:

- task: Docker@2
  displayName: Build docker image A
  inputs:
    command: build
    # 移除containerRegistry,避免关联远程ACR
    buildContext: '$(Pipeline.Workspace)'
    # 给镜像打本地标签,比如A:1.0.0
    arguments: '--tag A:1.0.0 --build-arg REPO_PATH=azure.repo.xxx'
    dockerfile: 'A/Dockerfile'

步骤2:修改镜像B的Dockerfile和构建任务

  1. 调整B的Dockerfile,使用本地标签的镜像A作为基础:
# 替换原来的FROM azure.repo.xxx/A:1.0.0
FROM A:1.0.0
# 后续构建步骤...
  1. 调整镜像B的Pipeline任务,同样移除远程ACR关联:
- task: Docker@2
  displayName: Build docker image B
  inputs:
    command: build
    # 移除containerRegistry
    buildContext: '$(Pipeline.Workspace)'
    arguments: '--tag B:1.0.0'
    dockerfile: 'B/Dockerfile'

步骤3:Docker Compose配置调整

后续运行时,直接使用本地标签的镜像:

version: '3'
services:
  service-a:
    image: A:1.0.0
    # 其他配置...
  service-b:
    image: B:1.0.0
    # 其他配置...
补充说明
  • 如果后续需要推送镜像到ACR,可以单独添加push命令的Docker任务,在本地构建完成后再执行推送操作
  • 确保Pipeline代理机器上的Docker服务正常运行,本地镜像能被Docker正确识别

内容的提问来源于stack exchange,提问作者Andrei Mladin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:23:31