Azure DevOps Server中Docker-Compose执行失败(退出码1)求助
Docker-Compose在Azure DevOps流水线执行报错(退出码1)排查
环境信息
- 运行平台:Azure DevOps Server流水线
- 构建代理服务器:Windows Server 2016
流水线执行报错日志
"C:\Program Files\Docker\docker-compose.exe" -f C:\agent\_work\1\s\docker\docker-compose.yml -f C:\agent\.docker-compose.1672864292001.yml -p materialsdatabase up -d --build error during connect: this error may indicate that the docker daemon is not running: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dmaterialsdatabase%22%3Atrue%7D%7D": open //./pipe/docker_engine: Access is denied. ##[debug]Exit code 1 received from tool 'C:\Program Files\Docker\docker-compose.exe' ##[debug]STDIO streams have closed for tool 'C:\Program Files\Docker\docker-compose.exe' ##[debug]task result: Failed ##[error]The process 'C:\Program Files\Docker\docker-compose.exe' failed with exit code 1
构建机管理员终端手动执行错误
"C:\Program Files\Docker\docker-compose.exe" -f C:\agent\_work\1\s\docker\docker-compose.yml -f C:\agent\.docker-compose.1672864292001.yml -p materialsdatabase up -d --build CreateFile C:\agent\.docker-compose.1672779313403.yml: The system cannot find the file specified.
注:缺失的临时文件与核心问题无关
手动启动dockerd日志
time="2023-01-04T15:29:29.988530700-05:00" level=info msg="Starting up" time="2023-01-04T15:29:30.034570000-05:00" level=info msg="Windows default isolation mode: process" time="2023-01-04T15:29:30.259637100-05:00" level=info msg="Loading containers: start." time="2023-01-04T15:29:30.373580700-05:00" level=info msg="Restoring existing overlay networks from HNS into docker" time="2023-01-04T15:29:30.662499700-05:00" level=error msg="Resolver Setup/Start failed for container nat, \"error in opening name server socket listen udp 172.30.144.1:53: bind: The requested address is not valid in its context.\"" time="2023-01-04T15:29:31.662930000-05:00" level=error msg="Resolver Setup/Start failed for container nat, \"error in opening name server socket listen udp 172.30.144.1:53: bind: The requested address is not valid in its context.\"" time="2023-01-04T15:29:32.665870600-05:00" level=error msg="Resolver Setup/Start failed for container nat, \"error in opening name server socket listen udp 172.30.144.1:53: bind: The requested address is not valid in its context.\"" time="2023-01-04T15:29:33.688807800-05:00" level=info msg="Loading containers: done." time="2023-01-04T15:29:33.696116400-05:00" level=info msg="Docker daemon" commit=9b96ce992b graphdriver(s)=windowsfilter version=20.10.9 time="2023-01-04T15:29:33.698066000-05:00" level=info msg="starting telemetry service" time="2023-01-04T15:29:33.705958100-05:00" level=info msg="Daemon has completed initialization" time="2023-01-04T15:29:33.773500600-05:00" level=info msg="API listen on //./pipe/docker_engine"
补充手动执行错误
C:\agent\_work\1\s>docker-compose -f docker\docker-compose.yml -p material-test-2-icamm up -d error during connect: this error may indicate that the docker daemon is not running: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dmaterial-test-2-icamm%22%3Atrue%7D%7D": open //./pipe/docker_engine: The system cannot find the file specified.
疑问解答
1. 推测是否正确?流水线执行时dockerd未运行?
是的,核心问题确实和dockerd运行状态或权限有关。报错信息里的open //./pipe/docker_engine: Access is denied和The system cannot find the file specified直接指向:要么dockerd没启动(管道不存在),要么流水线代理账户没有访问该管道的权限。
你手动启动dockerd后流水线仍报错,大概率是流水线使用的代理账户不在docker-users用户组中,导致没有权限访问Docker管道;或者dockerd未设置为自动启动,流水线运行时dockerd已经停止。
2. dockerd启动时的错误是否与流水线问题相关?如何验证功能正常?
dockerd启动时的Resolver Setup/Start failed错误和当前流水线问题无关。这个错误是Docker尝试绑定NAT网络的DNS端口(53)失败,通常是端口被其他程序占用,但从日志最后一行API listen on //./pipe/docker_engine可以确认,dockerd已经完成初始化并正常提供API服务,核心功能不受影响。
验证Docker功能是否正常的步骤:
- 用流水线代理的账户登录构建机,执行
docker info或docker run hello-world,如果能正常输出信息或运行容器,说明Docker本身功能正常; - 如果执行上述命令出现权限错误,将代理账户添加到本地
docker-users组,然后重启代理服务或重新登录账户; - 检查dockerd是否设置为自动启动:在服务列表中找到
Docker Desktop Service,设置启动类型为“自动”,确保每次机器重启后dockerd都会自动运行。
内容的提问来源于stack exchange,提问作者Curtis Gray
相关产品推荐
相关产品推荐

