当前位置: 首页 > 知识库问答 >
问题:

无法通过java客户端连接到停靠的elasticsearch

班玉堂
2023-03-14

我设置了一个带有官方REPO elasticsearch docker图像的elasticsearch容器。然后运行它

docker run -dP elasticsearch

轻松又有效。ps信息是

CONTAINER ID        IMAGE                  COMMAND                CREATED             STATUS              PORTS                                              NAMES
658b49ed9551        elasticsearch:latest   "/docker-entrypoint.   2 seconds ago       Up 1 seconds        0.0.0.0:32769->9200/tcp, 0.0.0.0:32768->9300/tcp   suspicious_albattani  

我可以使用超文本传输协议访问服务器-客户端通过端口32769-

baihetekiMacBook-Pro:0 baihe$ curl 10.211.55.100:32769
{
  "status" : 200,
  "name" : "Scorpia",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.4.5",
    "build_hash" : "2aaf797f2a571dcb779a3b61180afe8390ab61f9",
    "build_timestamp" : "2015-04-27T08:06:06Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

现在我需要我的JAVA程序与dockerize elasticsearch一起工作。java Node客户端只能通过32768-连接到elasticsearch

    Settings settings = ImmutableSettings.settingsBuilder()
            .put("client.transport.sniff", true)
            .put("client.transport.ignore_cluster_name", true).build();
    client = new TransportClient(settings);
    ((TransportClient) client)
    .addTransportAddress(new InetSocketTransportAddress(
            "10.211.55.100", 32768));

然后我在控制台中得到以下错误:

Caused by: org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:305)
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:200)
    at org.elasticsearch.client.transport.support.InternalTransportIndicesAdminClient.execute(InternalTransportIndicesAdminClient.java:86)
    at org.elasticsearch.client.support.AbstractIndicesAdminClient.exists(AbstractIndicesAdminClient.java:170)
    at org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequestBuilder.doExecute(IndicesExistsRequestBuilder.java:53)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91)
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65)
    at cct.bigdata.yellowbook.service.impl.ResourceServiceImpl.<init>(ResourceServiceImpl.java:49)
    at cct.bigdata.yellowbook.config.YellowBookConfig.resourceService(YellowBookConfig.java:21)
    at cct.bigdata.yellowbook.config.YellowBookConfig$$EnhancerBySpringCGLIB$$e7d2ff3e.CGLIB$resourceService$0(<generated>)
    at cct.bigdata.yellowbook.config.YellowBookConfig$$EnhancerBySpringCGLIB$$e7d2ff3e$$FastClassBySpringCGLIB$$72e3e213.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:312)
    at cct.bigdata.yellowbook.config.YellowBookConfig$$EnhancerBySpringCGLIB$$e7d2ff3e.resourceService(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
    ... 31 common frames omitted

当我直接在主机中运行elasticsearch时。一切都很好。

我在docker hub上检查elasticsearch的所有dockerfile。似乎他们都只是做了以下几点:

EXPOSE 9200 9300

我想知道有没有人试过做类似的事情。9300是正常的TCP端口还是UDP端口?在运行容器时,我需要做一些特殊的事情来制作它吗?谢谢

共有2个答案

哈烨熠
2023-03-14

这对我很有用(在docker compose.yml中)。

version: "2"
services:
    elasticsearch5:
        image: docker.elastic.co/elasticsearch/elasticsearch:5.5.3
        container_name: elasticsearch5
        environment:
            - cluster.name=elasticsearch5-cluster
            - http.host=0.0.0.0
            - network.publish_host=127.0.0.1
            - transport.tcp.port=9700
            - discovery.type=single-node
            - xpack.security.enabled=false
        ports:
            - "9600:9200"
            - "9700:9700"

指定网络。发布主机和传输。tcp。波特似乎起了作用。而sniff=true仍然有效。

段干华晖
2023-03-14

如果将“client.transport.sniff”设置为false,它应该可以工作。

如果仍要使用嗅探,请遵循以下说明:https://github.com/olivere/elastic/wiki/Docker

详细讨论如下:https://github.com/olivere/elastic/issues/57#issuecomment-88697714

 类似资料:
  • 我在docker上安装并运行Rabbitmqhttps://hub.docker.com/_/rabbitmq/: 我可以登录管理员与http://localhost:15672/从终端我可以使用Rabbitmqadmin成功的所有例子在这里http://www.rabbitmq.com/management-cli.html,添加-u admin-p nimda进行身份验证。我可以发布和接收消息

  • 我正在尝试通过Phoenix连接HBase集群。首先,我已经将Phoenix客户端和查询服务器jars文件复制到HMaster和HRegion lib文件夹,并重新启动HBase服务。 服务器-通过/bin/queryserver.py启动Phoenix服务器。运转正常。 客户端- 它工作在伪节点集群上。但在启用HA的Hadoop集群中失败。 在高可用性集群中,我已经为文件中的属性设置了活动名称代

  • 我编写了一个简单的HBase客户端程序来在我的HBase集群(1个主服务器和3个区域服务器)中执行CRUD操作。Zookeeper实例仅在主服务器中运行,仲裁包括所有4台服务器。集群运行良好,可以使用YCSB客户端执行读/写操作(意味着服务器/Zookeeper端没有任何错误)。 现在,在eclipse类路径中,我添加了所有HBase库和hbase-0.94.7.jar(包含hbase-defau

  • 我无法获取上一个已知位置。我已经在谷歌控制台中启用了地理编码API和谷歌地点API的Android。我在清单文件中添加了 API 密钥: 但我不断在控制台中收到一条消息:“无法连接到Google API客户端:连接结果{状态代码=API_UNAVAILABLE,分辨率=空}” 更新 我使用谷歌示例 onConnected和onConnectionFailed不调用。 而且我也使用Android反应

  • 我已经用serversocket和套接字类在Java语言上创建了一个客户机服务器程序,带有datainputstream和dataoutputstream用于发送和接收数据。 但问题是,当我在LAN(局域网)或本地主机上运行时,它可以正常工作,但当我试图通过WAN(广域网)连接客户端和服务器时,它甚至连服务器都没有连接 并且为了通过WAN连接它,我输入了服务器端程序的ip地址作为socket类的C