Can't connect to my Elasticsearch started with:
docker-compose up
Running command:
curl -XGET http://localhost:9200/_nodes/http?pretty
Output:
{
"cluster_name" : "elasticsearch",
"nodes" : {
"qD18rHzhQaexExUw5sBgXg" : {
"name" : "Scanner",
"transport_address" : "172.19.0.3:9300",
"host" : "172.19.0.3",
"ip" : "172.19.0.3",
"version" : "6.2.3",
"build" : "fcbb46d",
"http_address" : "172.19.0.3:9200",
"http" : {
"bound_address" : [ "0.0.0.0:9200" ],
"publish_address" : "172.19.0.3:9200",
"max_content_length_in_bytes" : 104857600
}
}
}
}
Connect with transport client:
public Client client() throws Exception {
Settings settings = Settings.builder()
.put("spring.data.elasticsearch.cluster-nodes", "localhost:9300")
.build();
TransportClient client = TransportClient.builder()
.settings(settings)
.build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
return client;
}
Get error:
Caused by: NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{localhost}{127.0.0.1:9300}]]
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:326)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:223)
docker-compose.yml
services:
elasticsearch:
image: elasticsearch
ports:
- '9200:9200'
- '9300:9300'
kibana:
image: kibana
ports:
- '5601:5601'
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
Dockerfile
FROM elasticsearch, kibana
EXPOSE 9200
EXPOSE 9300
(running a local installed Elasticsearch without Docker it works!)
What am I doing wrong? Any idea how to fix it?
Transport endpoint is bound on localhost inside elasticsearch
container. That's why it is only accessible from the container itself.
Transport endpoint should be bound to 0.0.0.0
( "transport_address" : "0.0.0.0:9300"
) in elasticsearch
container and it will be possible to access it via localhost on a host machine by localhost:9300
.
So, you can achieve that with the following docker-compose.yaml
:
version: "3"
services:
elasticsearch:
image: elasticsearch
command: "-Etransport.host=0.0.0.0"
ports:
- '9200:9200'
- '9300:9300'
kibana:
image: kibana
ports:
- '5601:5601'
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
Update:
If you just use the above docker-compose.yaml
, elasticsearch
container fails with the following error when it starts:
elasticsearch_1 | [2018-03-26T07:44:13,475][INFO ][o.e.n.Node ] [rzYPgrJ] starting ...
elasticsearch_1 | [2018-03-26T07:44:13,663][INFO ][o.e.t.TransportService ] [rzYPgrJ] publish_address {172.17.0.2:9300}, bound_addresses {0.0.0.0:9300}
elasticsearch_1 | [2018-03-26T07:44:13,688][INFO ][o.e.b.BootstrapChecks ] [rzYPgrJ] bound or publishing to a non-loopback address, enforcing bootstrap checks
elasticsearch_1 | ERROR: [1] bootstrap checks failed
elasticsearch_1 | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
elasticsearch_1 | [2018-03-26T07:44:13,696][INFO ][o.e.n.Node ] [rzYPgrJ] stopping ...
elasticsearch_1 | [2018-03-26T07:44:13,747][INFO ][o.e.n.Node ] [rzYPgrJ] stopped
elasticsearch_1 | [2018-03-26T07:44:13,747][INFO ][o.e.n.Node ] [rzYPgrJ] closing ...
elasticsearch_1 | [2018-03-26T07:44:13,762][INFO ][o.e.n.Node ] [rzYPgrJ] closed
That's because we changed transport endpoint
be listened on 0.0.0.0
.
In order to fix it, it is necessary to increase vm.max_map_count
sysctl parameter on a host mashine at least up to 262144
:
sudo sysctl -w vm.max_map_count=262144
Now you can successfully start both containers by docker-compose up
.
When downgrading to elasticsearch:2.4.4 it works, I suspect it has to do with SpringData not being compatible with latest Elasticsearch.
...
services:
elasticsearch:
image: elasticsearch:2.4.4
ports:
- '9200:9200'
- '9300:9300'
kibana:
image: kibana:4.6.1
...
Charts:
https://github.com/spring-projects/spring-data-elasticsearch
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.