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

同Docker网络下Java应用连接Elasticsearch报connection refused问题求助

问题排查与解决方案

1. 修正Elasticsearch的网络绑定配置

Elasticsearch容器如果默认绑定127.0.0.1,仅允许容器内部访问,同一Docker网络的其他容器无法连接。需要修改配置让它监听所有网卡:

  • 修改elasticsearch.yml配置文件:
    network.host: 0.0.0.0
    
  • 或者启动容器时通过环境变量指定:
    docker run -e "network.host=0.0.0.0" elasticsearch:<your-version>
    

2. 更换容器间的连接地址

本地连接时你用的localhost:9200是指向宿主机,但Docker网络内要使用Elasticsearch容器的容器名或服务名(Docker Compose场景)作为主机地址。比如:

  • 若ES容器名为elasticsearch,Java应用的连接地址需改为http://elasticsearch:9200
  • 用Docker Compose时,若ES服务名为es,则地址为http://es:9200

3. 确认容器在同一Docker网络

检查两个容器的网络归属:

  • 查看ES容器网络:
    docker inspect elasticsearch | grep Networks
    
  • 查看Java应用容器网络:
    docker inspect <your-java-app-container-name> | grep Networks
    
  • 若不在同一网络,手动添加:
    docker network connect <target-network-name> <your-java-app-container-name>
    

4. 验证ES容器内部端口监听

确保ES容器内的9200端口处于监听状态:

docker exec elasticsearch netstat -tulpn | grep 9200

5. 检查Java客户端配置

确认代码中使用了正确的连接地址,示例:

RestClient restClient = RestClient.builder(
    new HttpHost("elasticsearch", 9200, "http")
).build();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:25:13