-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Docker
If you are running Elasticsearch inside a Docker container, you need to make sure that Elasticsearch returns an IP address that is accessible from outside of the container. You can do that by specifying the network.publish_host
(or network.host
) setting, as stated in the Elasticsearch documentation:
The
network.publish_host
setting allows to control the host the node will publish itself within the cluster so other nodes will be able to connect to it. Of course, this can’t be theanyLocalAddress
, and by default, it will be the first non loopback address (if possible), or the local address.The
network.host
setting is a simple setting to automatically set bothnetwork.bind_host
andnetwork.publish_host
to the same host value.
If you don't configure your Elasticsearch inside Docker, the sniffing process won't work. You can either disable sniffing, or configure the network settings.
For convenience, I've created a repository that you can use as an example on how to use Elastic with Docker / Docker Compose.
The repository has a list of scripts that you can use to run Elasticsearch in e.g. Docker for Mac (other untested). E.g. Elastic version 5 comes with ./run-es-5.2.1.sh
which starts Elasticsearch version 5.2.1 with the configuration files located at ./config
. Please review these files and settings if you run into trouble with Docker and Elasticsearch.
Here's a step-by-step guide from a user that got it to work on a Mac (#57):
- If you're using Boot2Docker, get the ip address of the virtual machine (
boot2docker ip
). If you are not using Boot2Docker, get the IP address of the machine running the Docker daemon. - Grab an elasticsearch.yml config from the Elasticsearch release archive.
- Update the config file to set
network.publish_host
to the IP address from step one. - Start an Elasticsearch container using your custom config file by mounting the directory containing the config file:
docker run -d -v "$PWD/config":/usr/share/elasticsearch/config elasticsearch
- Verify that
publish_address
is the IP address from step one when you runcurl -XGET http://<IPAddress>:9200/_nodes/http?pretty
. The publish address also gets printed in the log file when starting up Elasticsearch.