From 649ca92b1481f461e5e4eb745e292530b4706e6b Mon Sep 17 00:00:00 2001 From: Geoff Bourne Date: Wed, 22 Feb 2017 17:01:00 -0600 Subject: [PATCH] [es] Port over Swarm compatible binding address lookup --- elasticsearch/Dockerfile | 1 - elasticsearch/README.md | 11 ++++++----- elasticsearch/start | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/elasticsearch/Dockerfile b/elasticsearch/Dockerfile index e7ed8c2f..d623c57b 100755 --- a/elasticsearch/Dockerfile +++ b/elasticsearch/Dockerfile @@ -14,7 +14,6 @@ COPY start /start EXPOSE 9200 9300 ENV ES_HOME=/usr/share/elasticsearch-$ES_VERSION \ - OPTS=-Dnetwork.host=_non_loopback_ \ DEFAULT_ES_USER=elasticsearch RUN adduser -S -s /bin/sh $DEFAULT_ES_USER diff --git a/elasticsearch/README.md b/elasticsearch/README.md index d203943f..11c6a165 100755 --- a/elasticsearch/README.md +++ b/elasticsearch/README.md @@ -182,13 +182,14 @@ Using the Docker Compose file above, a value of `2` is appropriate when scaling docker-compose scale master=3 -## Auto transport/http discovery with Swarm Mode +## Multiple Network Binding, such as Swarm Mode -When using Docker Swarm mode (starting with 1.12), the overlay and ingress network interfaces are assigned -multiple IP addresses. As a result, it creates confusion for the transport publish logic even when using -the special value `_eth0_`. +When using Docker Swarm mode the container is presented with multiple ethernet +devices. By default, all global, routable IP addresses are configured for +Elasticsearch to use as `network.host`. -To resolve this, add +That discovery can be overridden by providing a specific ethernet device name +to `DISCOVER_TRANSPORT_IP` and/or `DISCOVER_HTTP_IP`, such as -e DISCOVER_TRANSPORT_IP=eth0 diff --git a/elasticsearch/start b/elasticsearch/start index d76cb8d6..27b7bcb9 100755 --- a/elasticsearch/start +++ b/elasticsearch/start @@ -26,12 +26,11 @@ discoverIpFromLink() { OPTS="$OPTS -Des.$mode.host=$ip" } -if [ "$DISCOVER_TRANSPORT_IP" != "" ]; then - discoverIpFromLink $DISCOVER_TRANSPORT_IP transport -fi -if [ "$DISCOVER_HTTP_IP" != "" ]; then - discoverIpFromLink $DISCOVER_HTTP_IP http -fi +discoverAllGlobalIps() { + ips=`ipaddr show scope global|awk '$1 == "inet" { if (!match($2,"/32")) { gsub("/.*","",$2) ; addrs[length(addrs)] = $2 } } END { for (i in addrs) { if (i>0) printf "," ; printf addrs[i] } }'` + OPTS="$OPTS --network.host=$ips" +} + if [ -n "$CLUSTER" ]; then OPTS="$OPTS -Des.cluster.name=$CLUSTER" @@ -98,6 +97,7 @@ else mkdir -p /conf/plugins fi +discoverAllGlobalIps mkdir -p /conf/scripts echo "Starting Elasticsearch with the options $OPTS"