微软托管Ubuntu构建代理集成测试调用Docker Rest Api失败咨询
问题结论
微软托管的Ubuntu版本构建代理默认不开放基于TCP端口的Docker REST API,仅通过Unix套接字暴露Docker服务接口,这是你调用超时的核心原因。
托管代理内的Docker引擎默认仅监听unix:///var/run/docker.sock套接字路径,未开启2375(非加密)、2376(加密)端口的TCP监听,所有指向TCP端口的Docker API请求自然会触发超时异常。你本地自建代理可以正常运行,是因为本地Docker环境主动开启了TCP端口监听的配置。
解决方案
方案1(推荐):调整Docker.DotNet的连接配置,指定Unix套接字地址进行通信
示例代码:var dockerConfig = new DockerClientConfiguration(new Uri("unix:///var/run/docker.sock")); using var dockerClient = dockerConfig.CreateClient();该方案无需修改托管代理的系统配置,兼容性最好,不会因为代理环境更新出现失效问题。
方案2(按需选择):流水线运行前置步骤主动开启Docker TCP监听
你可以在集成测试运行前执行以下命令修改Docker配置并重启服务:# 修改daemon配置开启本地TCP监听 sudo echo '{"hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"]}' | sudo tee /etc/docker/daemon.json # 重启Docker服务 sudo systemctl restart docker # 等待服务启动完成 sleep 10执行完成后即可通过
http://127.0.0.1:2375调用Docker REST API。
内容的提问来源于stack exchange,提问作者Mikhail Ch
相关产品推荐
相关产品推荐

