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

Azure Pipeline中DockerCompose@0任务找不到Docker Compose的求助

问题描述

在Azure DevOps为.NET项目搭建新流水线时,新部署的Ubuntu服务器代理上的DockerCompose@0任务抛出错误:

Docker Compose was not found. You can provide the path to docker-compose via 'dockerComposePath'

已按照Docker官方文档完成环境安装,且在流水线中执行docker compose version和docker version命令均能正常返回版本信息,怀疑是权限或路径匹配问题,但对Linux环境排查经验不足,寻求可行解决办法。

对应的流水线配置如下:

trigger: none

variables:
  - name: SourceTarget
    value: s/repo

pool:
  name: Default
  demands:
    - agent.name -equals azdevops-dev

stages:
  - stage: Build
    jobs:
      - job: "BuildJob"
        variables:
          solution: "**/*.sln"
          buildPlatform: "any cpu"
          buildConfiguration: "Release"
        pool:
          vmImage: "ubuntu-latest"
        steps:
          - checkout: self
            path: $(SourceTarget)
            displayName: "Pull Source"
        
          - task: DockerInstaller@0
            inputs:
              dockerVersion: '17.09.0-ce'

          - task: DockerCompose@0
            displayName: "Create Local Database"
            inputs:
             containerregistrytype: 'Container Registry'
             dockerComposeFile: '$(Pipeline.Workspace)/$(SourceTarget)/db/docker-compose-sql-server.yml'
             action: 'Run a Docker Compose command'
             dockerComposeCommand: 'up -d'

          - task: UseDotNet@2
            displayName: "Install .Net Core SDK"
            inputs:
              version: 7.0.306
              performMultiLevelLookup: true
            
          - task: NuGetAuthenticate@1
          - script: dotnet restore --no-cache --force
            displayName: "NuGet Package Restore"
            workingDirectory: $(Pipeline.Workspace)/$(SourceTarget)
          
          - task: DotNetCoreCLI@2
            displayName: "Dotnet Build"
            inputs:              
              projects: "**/*.csproj"
              arguments: "--configuration $(buildConfiguration)"
              workingDirectory: $(Pipeline.Workspace)/$(SourceTarget)
          
          - task: DotNetCoreCLI@2
            displayName: "Dotnet Test"
            inputs:
              command: test
              projects: "**/*[Tt]est/*.csproj"
              arguments: "--configuration $(buildConfiguration)"
            enabled: true
            env:
              ConnectionStrings__Primary: "Data Source=localhost; User Id=xxx; Password=xxx; Database=xxx_xxx;"
解决办法

1. 显式指定docker-compose路径

DockerCompose@0任务默认查找独立的docker-compose二进制文件,但新版Docker中Compose以CLI插件形式存在,路径通常为/usr/libexec/docker/cli-plugins/docker-compose。先在代理服务器上执行find / -name docker-compose确认实际路径,然后在任务中添加dockerComposePath参数:

- task: DockerCompose@0
  displayName: "Create Local Database"
  inputs:
    containerregistrytype: 'Container Registry'
    dockerComposeFile: '$(Pipeline.Workspace)/$(SourceTarget)/db/docker-compose-sql-server.yml'
    action: 'Run a Docker Compose command'
    dockerComposeCommand: 'up -d'
    dockerComposePath: '/usr/libexec/docker/cli-plugins/docker-compose' # 替换为实际路径

2. 修复代理用户权限

确保Azure DevOps代理运行用户(默认是vstsagent)拥有Docker执行权限:

  • 将用户加入docker组:sudo usermod -aG docker vstsagent
  • 重启代理服务:sudo systemctl restart azure-devops-agent.service
  • 切换到代理用户执行docker compose version,验证无权限报错

3. 替换为Script任务绕过时序问题

如果DockerCompose@0任务的路径匹配问题无法解决,直接用Script任务执行Docker Compose命令:

- script: |
    docker compose -f $(Pipeline.Workspace)/$(SourceTarget)/db/docker-compose-sql-server.yml up -d
  displayName: "Create Local Database via Script"

4. 移除冲突的DockerInstaller任务

流水线中使用DockerInstaller@0安装了旧版本Docker(17.09.0-ce),可能与代理上已安装的新版Docker环境冲突。建议移除该任务,直接使用系统已部署的Docker版本:

# 删除以下任务块
# - task: DockerInstaller@0
#   inputs:
#     dockerVersion: '17.09.0-ce'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:46:00