Spring Boot项目无法连接服务器Docker部署的Elasticsearch报错如何解决
问题排查与解决方案
根因定位
报错明确为java.net.ConnectException: Timeout connecting to [/206.189.178.228:9200],即Spring Boot服务无法正常与Elasticsearch服务的9200端口建立网络连接,可按以下步骤依次排查修复:
排查步骤
1. 确认Elasticsearch服务本身正常运行
- 登录部署Elasticsearch的服务器,执行命令
curl http://localhost:9200,如果返回包含ES版本、集群名称的JSON响应,说明ES服务启动正常。 - 如果无响应,执行
docker ps查看searchservice-elasticsearch容器是否处于运行状态,异常退出的话执行docker logs [容器ID]查看ES启动报错日志排查原因,常见问题包括内存不足、权限不足等。
2. 排查网络连通性问题
你当前的配置存在明显的网络配置错误:Spring Boot服务加入了food_default外部网络,但Elasticsearch容器未配置加入该网络,容器跨网络无法直接通信。可选择以下两种方案修复:
方案A:走容器内部网络(推荐,更安全高效)
无需公网开放9200端口,同主机Docker容器内部通信即可:
- 修改
elasticSearch.yml,为ES服务添加网络配置,和Spring Boot服务保持在同一网络:
version: '2' services: searchservice-elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0 ports: - 9200:9200 - 9300:9300 environment: - 'ES_JAVA_OPTS=-Xms1024m -Xmx1024m' - 'discovery.type=single-node' # 新增网络配置 networks: - food_default networks: food_default: external: true
- 统一所有ES连接地址为Docker服务名
searchservice-elasticsearch:9200,需要修改的配置点:
searchService.yml中的三个参数:SPRING_DATA_JEST_URI=http://searchservice-elasticsearch:9200SPRING_ELASTICSEARCH_REST_URIS=http://searchservice-elasticsearch:9200elasticsearch.host=http://searchservice-elasticsearch:9200
- 项目内
ElasticsearchConfiguration配置类:将connectedTo("206.189.178.228:9200")修改为connectedTo("searchservice-elasticsearch:9200") application-prod.yml中的两个配置:spring: data: jest: uri: http://searchservice-elasticsearch:9200 elasticsearch: rest: uris: http://searchservice-elasticsearch:9200
方案B:走公网IP访问
如果需要跨主机访问ES:
- 确认云服务器控制台安全组开放了9200端口的入站规则,同时服务器内部防火墙(firewalld/iptables)也开放9200端口。
- 在部署Spring Boot服务的主机上执行
curl http://206.189.178.228:9200验证连通性,连通后再启动服务。
3. 修正其他错误配置
- 你当前
searchService.yml中SPRING_ELASTICSEARCH_REST_URIS配置为http://0.0.0.0:9200属于错误配置,0.0.0.0是服务监听地址,不能作为访问地址使用,必须替换为实际的ES访问地址。 - 确认Spring Data Elasticsearch版本和ES 7.1.0版本匹配,对应Spring Data Elasticsearch版本为3.2.x,避免版本不兼容导致的连接异常。
内容的提问来源于stack exchange,提问作者Abdalrhman Alkraien
相关产品推荐
相关产品推荐

