我正在从Docker运行Elasticsearch实例。该图像来自jHipster docker中心仓库:jhipster / jhipster- elasticsearch / -我使用的是图像v1.3.2,因为我需要Elasticsearch 2.4.0(以与该项目的Spring Boot版本保持一致)。
我正在使用,Logstash和Kibana图像启动ES容器docker-compose。这是启动ES容器的设置:
docker-compose
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 config的内部配置:
elasticsearch_custom.yml
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:
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}]
我用谷歌搜索并尝试了不同的配置方法,也将其client.transport.sniff设置为false,但没有一种可行。现在,我花了很多时间尝试配置此服务器,但我仍然缺少一些东西。
client.transport.sniff
false
在此先感谢您的帮助。
更新:
启动应用程序时,还将运行嵌入式ES实例。所以主机端口配置是这样的:
这是完整的docker-compose.yml:
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:())
我设法通过在内部定义transport.hostas 0.0.0.0来elasticsearch_custom.yml使它工作,因此实例绑定到了容器的ip。
transport.host
0.0.0.0
也许这也应该是elasticsearch.yml项目github repo上的默认设置。
elasticsearch.yml