2017-09-01 39 views
1

我正在运行Docker的Elasticsearch实例。该图像来自jHipster Docker Hub回购:jhipster/jhipster-elasticsearch/ - 我使用image v1.3.2,因为我需要Elasticsearch 2.4.0(与Spring Boot版本的项目一致)。通过Java/Spring Boot连接到Docker Elasticsearch实例

我开始ES容器以及Logstash和Kibana图像,其中docker-compose。这是启动ES容器的设置:

jhipster-elasticsearch: 
    image: jhipster/jhipster-elasticsearch:v1.3.2 
    ports: 
     - 9400:9200 
     - 9500:9300 
    volumes: 
     - ./log-es-config/elasticsearch_custom.yml:/usr/share/elasticsearch/config/elasticsearch.yml 

所以我使用9400的REST和9500传输通信。

这里面elasticsearch_custom.yml配置安装到ES配置:

cluster.name: "log-cluster" 
node.name: "log-node" 
http.host: 0.0.0.0 
transport.host: 127.0.0.1 
transport.tcp.port: 9500 
transport.publish_port: 9500 

当我开始容器,这是我从http://localhost:9400/_nodes得到:

"cluster_name": "log-cluster", 
    "nodes": { 
    "xLsGj2DyTdCF89I7sAToVw": { 
     "name": "log-node", 
     "transport_address": "127.0.0.1:9500", 
     "host": "127.0.0.1", 
     "ip": "127.0.0.1", 
     "version": "2.4.0", 
     "build": "ce9f0c7", 
     "http_address": "172.18.0.5:9200", 
     "settings": { 
     "cluster": { 
      "name": "log-cluster" 
     }, 
     ... (I can put all response if needed) 

JAVA API:

现在我试图连接到这个ES节点,像这样:

@Bean 
    public ElasticsearchOperations logsElasticsearchOperations() throws UnknownHostException { 
     Settings settings = Settings.settingsBuilder() 
      .put("cluster.name", "log-cluster") 
      .put("node.name", "log-node") 
      .build(); 

     Client client = TransportClient.builder() 
      .settings(settings) 
      .build() 
      .addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("127.0.0.1", 9500))); 


     ElasticsearchTemplate template = new ElasticsearchTemplate(client); 
     template.createIndex(ProcessLog.class); 
     log.debug("Elasticsearch for logs configured."); 
     return template; 
    } 

的错误,我得到的是最有名的一个:

Caused by: org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{127.0.0.1}{127.0.0.1:9500}]

我用Google搜索,并尝试不同的配置方式,也与client.transport.sniff设置为false,但那些工作的非。现在我花了很多时间试图配置这个,我仍然错过了一些东西。

在此先感谢您的帮助。

UPDATE:

有还嵌入运行,当我启动应用程序ES实例。所以主机端口的配置是这样的:

  • 嵌入式ES:9200(HTTP),9300(TCP)
  • 码头工人的ES:9400(HTTP),9500(TCP)

这里充满docker-compose.yml

version: '2' 
    services: 
    jhipster-elasticsearch: 
     # elasticsearch 2.4.0 - to be in line with spring boot version 
     image: jhipster/jhipster-elasticsearch:v1.3.2 
     ports: 
      - 9400:9200 
      - 9500:9300 
     volumes: 
      - ./log-es-config/elasticsearch_custom.yml:/usr/share/elasticsearch/config/elasticsearch.yml 
    jhipster-logstash: 
     image: jhipster/jhipster-logstash:v2.2.1 
     command: logstash -f /conf/logstash_custom.conf 
     ports: 
      - 5000:5000/udp 
      - 6000:6000/tcp 
     volumes: 
      - ./logstash-log-es-conf/:/conf 
    jhipster-console: 
     image: jhipster/jhipster-console:v2.0.1 
     ports: 
      - 5601:5601 
    jhipster-zipkin: 
     image: jhipster/jhipster-zipkin:v2.0.1 
     ports: 
      - 9411:9411 
     environment: 
      - ES_HOSTS=http://jhipster-elasticsearch:9400 
      - ZIPKIN_UI_LOGS_URL=http://localhost:5601/app/kibana#/dashboard/logs-dashboard?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:now-1h,mode:quick,to:now))&_a=(filters:!(),options:(darkTheme:!f),panels:!((col:1,id:logs-levels,panelIndex:2,row:1,size_x:6,size_y:3,type:visualization),(col:7,columns:!(stack_trace),id:Stacktraces,panelIndex:7,row:1,size_x:4,size_y:3,sort:!('@timestamp',desc),type:search),(col:11,id:Log-forwarding-instructions,panelIndex:8,row:1,size_x:2,size_y:3,type:visualization),(col:1,columns:!(app_name,level,message),id:All-logs,panelIndex:9,row:4,size_x:12,size_y:7,sort:!('@timestamp',asc),type:search)),query:(query_string:(analyze_wildcard:!t,query:'{traceId}')),title:logs-dashboard,uiState:()) 

回答

1

我设法通过在elasticsearch_custom.yml内定义transport.host0.0.0.0来实现这个工作,所以实例绑定到容器的ip。

也许这也应该是该项目的github repoelasticsearch.yml的默认设置。

+0

这正是我错过的观点。 '''transport.host:0.0.0.'''完成了这项工作 – Riverside

0

从你的搬运工撰写文件时,主机上的9500端口映射到端口9300的容器内,即:

ports: 
    - 9500:9300 

如此以来,端口9500是泊坞窗容器外的TCP端口,在您的elasticsearch_custom.yml配置文件,你应该有这个代替

transport.tcp.port: 9300 
transport.publish_port: 9300 

或者干脆离开这两行了,因为9300是默认的TCP端口。

+0

感谢您的回复,我刚刚尝试过,但同样的错误仍然存​​在。 – hideburn

+0

你介意分享完整的'docker-compose.yml'文件,以便我们可以获得真实的上下文视图吗? – Val

+0

我刚更新了这个问题。 – hideburn

0

我建议退后一步并安装Head Plugin(https://github.com/mobz/elasticsearch-head),以便您可以查看群集,它将显示群集名称的详细信息。

也可以尝试从命令行发送一个简单的索引请求,以确保您可以连接到您的群集。

相关问题