Error: java.lang.RuntimeException: org.apache.hc.client5.http.HttpHostConnectException: Connect to http://192.168.201.129:2376 [/192.168.201.129] failed: Connection refused
Java中HttpHostConnectException连接被拒绝问题分析
当遇到java.lang.Exception: org.apache.http.conn.HttpHostConnectException: Connect to 172.24.1.227:80
失败并显示“拒绝连接 (Connection refused)”时,通常表明客户端尝试访问的目标服务未运行或网络配置存在问题[^1]。
可能的原因
目标服务器不可达
如果Docker API地址设置为192.168.201.129:2376
,则需要确认该IP和端口上的服务是否正在运行。如果服务未启动,则会触发Connection refused
错误[^2]。防火墙或安全组阻止连接
防火墙可能禁用了特定端口的入站流量。例如,默认情况下,某些云环境的安全组可能会屏蔽外部请求。不正确的主机名解析
DNS解析可能导致实际连接到错误的IP地址。可以通过指定明确的IP而非域名来规避此风险[^3]。SSL/TLS证书验证失败
当通过HTTPS调用API时,若存在自签名证书或者过期证书,也可能引发类似的异常行为。尽管这不是直接的ConnectionRefused
原因,但它常伴随其他通信障碍一起发生。
解决方案建议
检查服务状态 确认Docker守护进程确实在监听
192.168.201.129:2376
上是否有活动实例。可以利用命令行工具telnet测试连通性:telnet 192.168.201.129 2376
调整防火墙规则 对于Linux系统来说,iptables可能是造成阻碍的因素之一;对于Windows平台而言,则需查看高级安全性中的入站规则设定情况。
修改应用程序代码逻辑处理超时机制 下面给出了一段示例程序展示如何增加重试次数以及合理设置socket timeout参数以增强鲁棒性的方法: ```java import java.io.IOException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients;
public class HttpClientExample { public static void main(String[] args) throws IOException, InterruptedException { CloseableHttpClient httpClient = null; try{ int retryCount=5; // 设置最大重试次数 while(retryCount-->0){ try(CloseableHttpResponse response=httpClient.execute(new HttpGet("http://192.168.201.129:2376"))){ System.out.println(response.getStatusLine()); break;// 成功获取响应后退出循环 }catch(Exception e){ Thread.sleep(1000); // 每次失败等待一秒再重新发起请求 } }
}finally{ if(httpClient!=null){ httpClient.close(); } } }
```
上述代码片段展示了通过不断尝试直到成功为止的方式提高成功率的同时也加入了简单的指数退避算法减少资源消耗的可能性。
相关推荐



















