Reputation: 2119
I have a container set up to run elasticsearch. The service starts but I can't connect to it via curl or the browser.
RUN \
cd /tmp && \
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch- 1.3.2.tar.gz && \
tar xvzf elasticsearch-1.3.2.tar.gz && \
rm -f elasticsearch-1.3.2.tar.gz && \
mv /tmp/elasticsearch-1.3.2 /elasticsearch
# Define mountable directories.
VOLUME ["/data"]
# Define default command.
CMD ["/elasticsearch/bin/elasticsearch"]
EXPOSE 9200
EXPOSE 9300
Connecting to http://localhost:9200
yields nothing. The docker ps shows ports;
0.0.0.0:49179->9200/tcp, 0.0.0.0:49180->9300/tcp
...
net::ERR_ADDRESS_UNREACHABLE
Am I missing some config value? THANKS!
[Update] I also tried the -p in the run command
docker run -i -p 9200:9200 -p 9300:9300 -t --rm -P team1/image1
Upvotes: 9
Views: 29940
Reputation: 61
Someone using Docker for Mac can use docker.for.mac.localhost
as a host for Elasticsearch.
curl http://docker.for.mac.localhost:9200
I had similar issue and changing the host worked for me
Upvotes: 2
Reputation: 1303
I had an issue with port forwarding when running Elasticsearch in a docker container. I solved the problem by manually specifying which interfaces to bind Elasticsearch server docker run --rm -p 9200:9200 -p 9300:9300 --name=es elasticsearch:latest -Des.network.host=0.0.0.0
.
The binding part is the -Des.network.host=0.0.0.0
at the end. I wrote a blog post detailing this at https://mad.is/2016/09/running-elasticsearch-in-docker-container/
Upvotes: 11
Reputation: 151
If you are running docker on OSX, note that the host is really the VirtualBox instance that was installed when you initialized boot2docker. So in this situation, instead of using:
curl http://localhost:9200
find the IP of the virtual box instance using, which I'll denote as VM_IP:
boot2docker ip
then try:
curl http://<VM_IP>:9200
Upvotes: 15
Reputation: 3522
I tested your Dockerfile, but it just works.
FROM dockerfile/java
RUN \
cd /tmp && \
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.tar.gz && \
tar xvzf elasticsearch-1.3.2.tar.gz && \
rm -f elasticsearch-1.3.2.tar.gz && \
mv /tmp/elasticsearch-1.3.2 /elasticsearch
# Define mountable directories.
VOLUME ["/data"]
# Define default command.
CMD ["/elasticsearch/bin/elasticsearch"]
EXPOSE 9200
EXPOSE 9300
I try to build this Dockerfile and run it.
$ docker build -t 25312935 .
$ docker run -t -p 9200:9200 -p 9300:9300 --rm 25312935
[2014-08-15 04:41:08,349][INFO ][node ] [Black Crow] version[1.3.2], pid[1], build[dee175d/2014-08-13T14:29:30Z]
[2014-08-15 04:41:08,349][INFO ][node ] [Black Crow] initializing ...
[2014-08-15 04:41:08,353][INFO ][plugins ] [Black Crow] loaded [], sites []
[2014-08-15 04:41:10,444][INFO ][node ] [Black Crow] initialized
[2014-08-15 04:41:10,444][INFO ][node ] [Black Crow] starting ...
[2014-08-15 04:41:10,547][INFO ][transport ] [Black Crow] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/172.17.0.72:9300]}
[2014-08-15 04:41:10,560][INFO ][discovery ] [Black Crow] elasticsearch/0mpczYoYSZCiAmbkxcsfpg
[2014-08-15 04:41:13,601][INFO ][cluster.service ] [Black Crow] new_master [Black Crow][0mpczYoYSZCiAmbkxcsfpg][eeb3396b1ecc][inet[/172.17.0.72:9300]], reason: zen-disco-join (elected_as_master)
[2014-08-15 04:41:13,615][INFO ][http ] [Black Crow] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/172.17.0.72:9200]}
[2014-08-15 04:41:13,615][INFO ][node ] [Black Crow] started
[2014-08-15 04:41:13,634][INFO ][gateway ] [Black Crow] recovered [0] indices into cluster_state
As you can see below, request 127.0.0.1:9200
returns json response.
$ curl 127.0.0.1:9200
{
"status" : 200,
"name" : "Black Crow",
"version" : {
"number" : "1.3.2",
},
"tagline" : "You Know, for Search"
}
Check your -p
option. It means publising container's port to host. If you doesn't write explicitly host's port, docker assign random port like below.
$ docker run -t -p 9200 -p 9300 --rm 25312935
$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1aa4c2c84d04 25312935:latest /elasticsearch/bin/e 15 seconds ago Up 15 seconds 0.0.0.0:49153->9200/tcp, 0.0.0.0:49154->9300/tcp sad_shockley
0.0.0.0:49153->9200/tcp
means that you can access container's 9200 port through host's 49153 port.
$ curl 127.0.0.1:49153
{
"status" : 200,
"name" : "Golem",
"version" : {
"number" : "1.3.2",
},
"tagline" : "You Know, for Search"
}
So if you want to use hosts 9200 port, explicitly write the host port like
-p 9200:9200or
-p 0.0.0.0:9200:9200`
$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eeb3396b1ecc 25312935:latest /elasticsearch/bin/e 59 seconds ago Up 58 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp high_elion
If this still doesn't work, try to --net=host
option. You can use the host network stack inside the container by using this option.
$ docker run -t --net=host --rm 25312935
$ curl 127.0.0.1:9200
{
"status" : 200,
"name" : "Black Crow",
"version" : {
"number" : "1.3.2",
},
"tagline" : "You Know, for Search"
}
If both don't work, I think that you need to check your other network configuration.
Upvotes: 8