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

Azure Pipeline中Docker Compose任务执行失败求助

Azure Pipeline Dev环境Docker Compose任务执行失败排查方案

我在Azure Pipeline的dev环境流水线中执行Docker Compose任务时失败,已尝试升级docker-compose.yml版本到3.9、部署服务器Docker Compose版本到2.12.2,但问题依旧。此前流水线运行正常。

流水线配置文件(dev.yml)

# Docker
# Build and push an image to Azure Container Registry
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- dev

resources:
- repo: self

variables:
  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: '53d49b4c-9b33-4d35-b5f7-44d8554a609a'
  imageRepository: 'apidevloyaledge'
  containerRegistry: 'devsahasholdingcr.azurecr.io'
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

pool:
  name: builders

stages:
- stage: Build
  displayName: Build the image
  jobs:
  - job: Build
    displayName: Build
    steps:
    
    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: 'docker-compose.yml'
        artifact: 'docker-compose'
        publishLocation: 'pipeline'

    - task: Docker@2
      displayName: Build
      inputs:
        containerRegistry: '$(dockerRegistryServiceConnection)'
        repository: '$(imageRepository)'
        command: 'build'
        Dockerfile: 'Dockerfile'
        tags: '$(tag)'

- stage: Push
  displayName: Push the image
  jobs:
  - job: Push
    displayName: Push
    steps:
    - task: Docker@2
      displayName: Push an image to container registry
      inputs:
        containerRegistry: '$(dockerRegistryServiceConnection)'
        repository: '$(imageRepository)'
        command: 'push'
        tags: '$(tag)'

- stage: DeployToServer
  displayName: Deploy
  jobs:
  - deployment: dockerDeployment
    displayName: Deployment to dev environment
    environment:
      name: dev
    pool:
      name: dev
      demands: Agent.Name -equals dev-1

    strategy:
      runOnce:
        deploy:
          steps:
    
            - task: DownloadPipelineArtifact@2
              inputs:
                buildType: 'current'
                artifactName: 'docker-compose'
                targetPath: '.'
                
            - task: DockerCompose@0
              inputs:
                containerregistrytype: 'Azure Container Registry'
                azureSubscription: 'Microsoft Azure Sponsorship(e6037dae-cb96-472a-a3a9-809f0b83ba39)'
                azureContainerRegistry: '{"loginServer":"devsahasholdingcr.azurecr.io", "id" : "/subscriptions/e6037dae-cb96-472a-a3a9-809f0b83ba39/resourceGroups/dev/providers/Microsoft.ContainerRegistry/registries/devsaholdingcr"}'
                dockerComposeFile: 'docker-compose.yml'
                dockerComposeFileArgs: 'tag = $(tag)'
                action: 'Run a Docker Compose command'
                dockerComposeCommand: 'up'
                arguments: '-d api-dev-loyaledge'

docker-compose.yml文件

version: "3.9"

services:
  api-dev-loyaledge:
    image: devsahasholdingcr.azurecr.io/apidevloyaledge:${tag}  
    container_name: api-dev-loyaledge  
    network_mode: "host"  
    restart: unless-stopped 
    environment: 
      - ASPNETCORE_ENVIRONMENT=Development
      
  api-testing-loyaledge:
    image: testingsahasholdingcr.azurecr.io/apitestingloyaledge:${tag}  
    container_name: api-testing-loyaledge
    network_mode: "host"  
    restart: unless-stopped 
    environment:
      - ASPNETCORE_ENVIRONMENT=testing

可能的原因及解决办法

1. 环境变量传递格式错误

Docker Compose任务中dockerComposeFileArgs的格式有误,当前设置的tag = $(tag)包含空格,会导致变量无法正确解析。修改为无空格的键值对格式:

dockerComposeFileArgs: 'tag=$(tag)'

2. 未登录测试环境容器注册表

docker-compose.yml中包含测试环境镜像,但当前Docker Compose任务仅配置了dev环境ACR登录,执行up命令时会因无法拉取测试镜像失败。

  • 方案1:在Docker Compose任务前添加登录测试环境ACR的步骤:
- task: Docker@2
  displayName: Login to Testing ACR
  inputs:
    containerRegistry: '<测试环境ACR的服务连接ID>'
    command: 'login'
  • 方案2:如果本次部署不需要启动测试服务,修改启动参数避免拉取依赖镜像:
arguments: '-d --no-deps api-dev-loyaledge'

3. 部署代理环境变量冲突

检查部署代理(dev-1)上是否存在同名tag环境变量,可能覆盖流水线传递的值。可在Docker Compose任务前添加命令行任务验证:

- task: CmdLine@2
  inputs:
    script: |
      echo "Pipeline tag: $(tag)"
      echo "System tag: $tag"

4. Docker Compose任务版本兼容性

DockerCompose@0任务较旧,可能与新版本Docker Compose存在兼容性问题。建议替换为DockerCompose@2任务,调整配置如下:

- task: DockerCompose@2
  displayName: Run Docker Compose up
  inputs:
    containerRegistry: '$(dockerRegistryServiceConnection)'
    dockerComposeFile: 'docker-compose.yml'
    action: 'Run a Docker Compose command'
    command: 'up'
    arguments: '-d api-dev-loyaledge'
    environmentVariables: 'tag=$(tag)'

5. 镜像拉取权限问题

确认dev环境服务连接是否有拉取devsahasholdingcr.azurecr.io/apidevloyaledge镜像的权限,若需要拉取测试镜像,同步检查测试环境ACR的权限配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:07:11