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

