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

Azure DevOps自托管macOS代理Docker任务执行失败求助

自托管macOS代理Azure DevOps流水线Docker任务连接失败问题

问题背景

自托管macOS代理在Azure DevOps流水线中执行Docker@2任务时失败,任务需从Dockerfile构建镜像并推送到镜像仓库,但无法与Docker守护进程通信。手动以代理用户身份执行Docker命令正常,但流水线运行时报错。

流水线配置

steps:
- script: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt
  displayName: 'Install dependencies'

- task: Docker@2
  inputs:
    containerRegistry: 'docker-connection'
    repository: 'enmareynoso/ids339-final'
    command: 'buildAndPush'
    Dockerfile: '**/Dockerfile'

报错信息

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

环境信息

  • Docker版本:
Docker version 24.0.7, build afdd53b
  • Docker符号链接:
lrwxr-xr-x  1 root  wheel  54 Nov 28  2022 /usr/local/bin/docker -> /Applications/Docker.app/Contents/Resources/bin/docker

已确认Docker Desktop处于运行状态,且代理用户拥有Docker操作权限,尝试常见方案后问题仍存在。

原因分析及解决建议

可能原因

  1. 流水线执行上下文的环境变量未正确加载Docker相关配置,比如DOCKER_HOST路径错误或未设置
  2. Azure DevOps代理以系统服务方式运行,无法访问用户级别的Docker Desktop会话
  3. Docker守护进程的socket文件权限在流水线上下文未正确授予代理用户

解决建议

  • 检查环境变量差异:在Docker任务前添加脚本,对比流水线与手动执行时的环境变量:

    echo "DOCKER_HOST: $DOCKER_HOST"
    echo "PATH: $PATH"
    echo "Docker path: $(which docker)"
    

    若发现DOCKER_HOST未设置或路径错误,可手动指定:

    export DOCKER_HOST=unix:///var/run/docker.sock
    
  • 调整代理运行方式:确保Azure DevOps代理在用户会话中运行,而非系统服务。重新安装代理时选择"Run as interactive process",避免系统服务上下文无法访问用户级Docker配置。

  • 验证Socket权限:在流水线脚本中检查Docker socket的权限及用户组:

    ls -l /var/run/docker.sock
    groups $(whoami)
    

    若用户不在docker组,可执行sudo usermod -aG docker $USER添加(需重启会话生效)。同时确保Docker Desktop设置中已开启"Allow the default Docker socket to be used"(路径:Docker Desktop > 设置 > Resources > Advanced)。

  • 重启代理服务:确保Docker Desktop完全启动后,再重启Azure DevOps代理服务,避免代理初始化时Docker守护进程未就绪。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:40:21