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

使用Azure自托管代理与Docker Desktop构建镜像失败:找不到Docker守护进程

排查Azure自托管代理无法连接Docker守护进程的问题

以下是针对该问题的具体排查步骤:

1. 检查自托管代理服务的运行身份

  • 自托管Azure Pipelines代理默认使用Local System账户运行,该账户通常没有访问Docker Desktop的权限。
  • 操作:打开services.msc,找到Azure Pipelines Agent服务,右键选择「属性」→「登录」,切换为你当前登录的、能正常使用Docker的本地用户账户,输入账户密码后重启服务。

2. 开启Docker守护进程的TCP监听

  • Docker Desktop默认未开启TCP端口监听,导致代理无法通过网络连接到守护进程。
  • 操作:
    1. 打开Docker Desktop设置 →「General」,勾选Expose daemon on tcp://localhost:2375 without TLS(测试场景使用,生产环境建议配置TLS加密)。
    2. 应用设置并重启Docker Desktop。
  • 验证:在代理机器上执行命令 docker -H tcp://localhost:2375 info,确认能正常返回Docker守护进程信息。

3. 配置代理环境变量

  • 确保自托管代理运行的环境中存在DOCKER_HOST变量,指向Docker守护进程的地址:
    • 系统环境变量中添加DOCKER_HOST=tcp://localhost:2375,或在代理的启动脚本中注入该变量。
  • 配置完成后重启代理服务,使环境变量生效。

4. 验证Docker Desktop后端权限

  • 若使用WSL 2后端:
    • 确认代理运行账户能正常访问WSL 2实例,执行wsl -l -v检查WSL发行版状态,同时确保Docker Desktop已开启「Use the WSL 2 based engine」选项。
  • 若使用Hyper-V后端:
    • 检查Hyper-V服务是否正常运行,且代理账户拥有Hyper-V的相关权限。

5. 排查流水线任务配置

  • 在Azure流水线中添加一个PowerShell/Bash脚本任务,执行docker info,先确认流水线上下文是否能正常访问Docker守护进程。
  • 检查Docker@2等流水线任务的配置,确保未指定错误的Docker主机地址,自定义Docker连接配置需与代理机器的Docker设置匹配。

附:你的Dockerfile(无语法问题)

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Project.API/Project.API.csproj", "Project.API/"]
RUN dotnet restore "Project.API/Project.API.csproj"
COPY . .
WORKDIR "/src/Project.API"
RUN dotnet build "Project.API.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Project.API.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Project.API.dll"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:01:41