使用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端口监听,导致代理无法通过网络连接到守护进程。
- 操作:
- 打开Docker Desktop设置 →「General」,勾选
Expose daemon on tcp://localhost:2375 without TLS(测试场景使用,生产环境建议配置TLS加密)。 - 应用设置并重启Docker Desktop。
- 打开Docker Desktop设置 →「General」,勾选
- 验证:在代理机器上执行命令
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」选项。
- 确认代理运行账户能正常访问WSL 2实例,执行
- 若使用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
相关产品推荐
相关产品推荐

