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

Azure DevOps流水线构建镜像报错:BUILD_IMAGE变量不能为空

解决Azure DevOps流水线构建镜像时BUILD_IMAGE为空的问题

问题原因

你的Dockerfile中定义了ARG BUILD_IMAGE参数,并在FROM ${BUILD_IMAGE} AS prep语句中使用,但执行docker build命令时未传入该参数的具体值,导致构建报错base name (${BUILD_IMAGE}) should not be blank。

解决方案

1. 在Docker@2任务中传递BUILD_IMAGE参数

修改流水线中的Docker@2任务,添加buildArguments字段,明确传入BUILD_IMAGE的具体值。

修改后的Docker@2任务配置:

- task: Docker@2
  displayName: Build and push an image to container registry
  inputs:
    command: buildAndPush
    repository: $(imageRepository)
    dockerfile: $(dockerfilePath)
    containerRegistry: $(dockerRegistryServiceConnection)
    tags: |
      $(tag)
    # 传入BUILD_IMAGE参数,替换为你的实际基础镜像地址
    buildArguments: '--build-arg BUILD_IMAGE=rgAquariumTestImageWestEU.azurecr.io/your-base-image:latest'

2. (可选)用流水线变量管理BUILD_IMAGE

如果需要灵活调整基础镜像,可以将BUILD_IMAGE定义为流水线变量:

variables:
  # 其他已有的变量...
  buildImage: 'rgAquariumTestImageWestEU.azurecr.io/your-base-image:latest'
  vmImageName: 'ubuntu-latest'

然后在Docker@2任务中引用该变量:

buildArguments: '--build-arg BUILD_IMAGE=$(buildImage)'

3. 确保基础镜像可访问

如果BUILD_IMAGE是Azure Container Registry中的私有镜像:

  • 确认流水线使用的dockerRegistryServiceConnection服务连接拥有该ACR的拉取(Pull)权限
  • 确保镜像rgAquariumTestImageWestEU.azurecr.io/your-base-image:latest确实存在于目标ACR中

4. (可选)给Dockerfile的ARG设置默认值

如果希望在未传入参数时构建不失败,可以在Dockerfile中给BUILD_IMAGE设置默认值:

ARG BUILD_IMAGE=public-image:tag # 替换为合适的公共基础镜像
ARG BASE_IMAGE
FROM ${BUILD_IMAGE} AS prep

附:原流水线配置及错误日志

原流水线配置

# Docker
# Build and push an image to Azure Container Registry

trigger:
- Initial-K8-Setup

resources:
- repo: self

variables:
  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: '7739b21f-2572-4f36-ab8b-df15ab821756'
  imageRepository: 'aquariumcms'
  containerRegistry: 'rgAquariumTestImageWestEU.azurecr.io'
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'

stages:
- stage: Build
  displayName: Build and push stage
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)
    - task: DockerCompose@0
      inputs:
        containerregistrytype: 'Azure Container Registry'
        azureSubscription: 'HAWeb2-CFS-NonProd'
        azureContainerRegistry: '{"loginServer":"rgAquariumTestImageWestEU.azurecr.io", "id" : "/subscriptions/5e2acfcb-7aeb-443d-9ea4-bc7553a51276/resourceGroups/rg-haweb-cfs-nonprod-web2-001/providers/Microsoft.ContainerRegistry/registries/rgAquariumTestImageWestEU"}'
        dockerComposeFile: '**/docker-compose.yml'
        additionalDockerComposeFiles: 'docker-compose.override.yml'
        dockerComposeFileArgs: 'REGISTRY=rgAquariumTestImageWestEU.azurecr.io/'
        action: 'Build services'
        additionalImageTags: '$(Build.BuildNumber)-$(Build.SourceBranchName)'
        includeLatestTag: true
    - task: DockerCompose@0
      inputs:
        containerregistrytype: 'Azure Container Registry'
        azureSubscription: 'HAWeb2-CFS-NonProd'
        azureContainerRegistry: '{"loginServer":"rgAquariumTestImageWestEU.azurecr.io", "id" : "/subscriptions/5e2acfcb-7aeb-443d-9ea4-bc7553a51276/resourceGroups rg-haweb-cfs-nonprod-web2-001/providers/Microsoft.ContainerRegistry/registries/rgAquariumTestImageWestEU"}'
        dockerComposeFile: '**/docker-compose.yml'
        additionalDockerComposeFiles: 'docker-compose.override.yml'
        dockerComposeFileArgs: 'REGISTRY=rgAquariumTestImageWestEU.azurecr.io/'
        action: 'Push services'
        additionalImageTags: '$(Build.BuildNumber)-$(Build.SourceBranchName)'
        includeLatestTag: true

错误日志

Starting: Build and push an image to container registry
    ==============================================================================
    Task         : Docker
    Description  : Build or push Docker images, login or logout, start or stop containers, or run a Docker command
    Version      : 2.214.0
    Author       : Microsoft Corporation
    Help         : https://aka.ms/azpipes-docker-tsg
    ==============================================================================
    /usr/bin/docker build -f /home/vsts/work/1/s/Dockerfile --label com.azure.dev.image.system.teamfoundationcollectionuri=https://dev.azure.com/dgsit/ --label com.azure.dev.image.system.teamproject=Sitecore --label com.azure.dev.image.build.repository.name=aquarium-cms --label com.azure.dev.image.build.sourceversion=dad7e8024ac8bba9b7b58bce934cdc96729da5cb --label com.azure.dev.image.build.repository.uri=https://dgsit@dev.azure.com/dgsit/Sitecore/_git/aquarium-cms --label com.azure.dev.image.build.sourcebranchname=Initial-K8-Setup --label com.azure.dev.image.build.definitionname=aquarium-cms (1) --label com.azure.dev.image.build.buildnumber=20230118.7 --label com.azure.dev.image.build.builduri=vstfs:///Build/Build/511111 -t ***/aquariumcms:511111 /home/vsts/work/1/s
    Sending build context to Docker daemon   15.5MB
    
    Step 1/29 : ARG BASE_IMAGE
    Step 2/29 : ARG BUILD_IMAGE
    Step 3/29 : FROM ${BUILD_IMAGE} AS prep
    base name (${BUILD_IMAGE}) should not be blank
    ##[error]base name (${BUILD_IMAGE}) should not be blank
    ##[error]The process '/usr/bin/docker' failed with exit code 1
    Finishing: Build and push an image to container registry

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:30:40