Docker下Elasticsearch无法通过java 连接

本文详细介绍了在使用Java API尝试连接Elasticsearch 9300端口时遇到的问题及解决方案。主要原因是Docker下安装的Elasticsearch默认集群名称与API中指定的名称不符,导致连接失败。文章提供了修改Elasticsearch.yml文件或在API中设定正确集群名字的方法来解决这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 背景

通过java API 连接es的时候9300端口无法访问, 提示如下错误:

[{#transport#-1}{eD3ouMadRCGvciJh4jzsMw}{127.199.116.213}{127.199.116.213:9300}]

org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{eD3ouMadRCGvciJh4jzsMw}{127.199.116.213}{127.199.116.213:9300}]

  • 原因

docker下安装的es默认集群名字为"docker-cluster", 而API 中不指定集群名的话, 默认为elasticsearch,从而导致无法连接.

  • 解决
  1. 修改elasticsearch.yml文件中指定cluster名字;
  2. API中设定cluster名字
  • 代办

无.

 

### 安装 DockerElasticSearch 为了在 Windows 操作系统上安装 Docker 并运行 ElasticSearch,需先确认已成功安装 Docker Desktop。之后可以利用 Docker 命令来启动 ElasticSearch 实例。 对于单节点的 ElasticSearch 部署,在命令提示符下输入以下指令: ```bash docker pull elasticsearch:7.4.2 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -d elasticsearch:7.4.2 ``` 上述命令会拉取指定版本的 ElasticSearch 镜像并以后台模式启动容器[^5]。 如果希望持久化数据或者挂载插件目录,则可以在 `run` 命令中加入 `-v` 参数用于绑定主机路径到容器内部路径。例如: ```bash docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \ -v C:\path\to\esdata:/usr/share/elasticsearch/data \ -e "discovery.type=single-node" elasticsearch:7.4.2 ``` 这里假设将本地磁盘上的某个文件夹映射到了容器内的 `/usr/share/elasticsearch/data` 路径作为存储位置[^3]。 ### 使用 Java 进行交互 要让 Java 应用程序能够连接至本机运行的 ElasticSearch,请确保应用程序与 ElasticSearch 的网络可达性正常,并设置正确的 REST API URL 地址(通常是 http://localhost:9200/)。可以通过官方提供的 High Level Rest Client 或者其他第三方库实现通信功能。 下面是一个简单的例子展示怎样使用 High Level Rest Client 来索引文档: ```java RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); IndexRequest request = new IndexRequest("posts"); request.id("1"); String jsonString = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}"; request.source(jsonString, XContentType.JSON); client.index(request, RequestOptions.DEFAULT); client.close(); ``` 这段代码展示了如何创建一个客户端对象并与远程服务器建立联系;接着构建了一个新的索引请求并将 JSON 文档发送给它所指向的目标索引[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值