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
相关产品推荐
相关产品推荐

