This Docker images provides the official/elasticsearch image as base with the mDNS/ZeroConf stack on top. So you can enjoy elasticsearch while it is accessible by default as elasticsearch.local. (Port 9200, 80 via proxy)
- Requirements
- Getting starting
- docker-compose usage example
- Host configs
- Configure a different mDNS hostname
- Other top level domains
- Further reading
- Host enabled Avahi daemon
- Host enabled mDNS NSS lookup
You just need to run it like that, to get a working elasticsearch:
$ docker run --rm hausgold/elasticsearch
The port 9200 is proxied by haproxy to port 80 to make elasticsearch.local directly accessible. The port 9200 and 9300 are untouched.
services:
elasticsearch:
image: hausgold/elasticsearch
environment:
# Mind the .local suffix
MDNS_HOSTNAME: elasticsearch.test.local
ES_JAVA_OPTS: -Xms128m -Xmx128m
discovery.type: single-node
ports:
# The ports are just for you to know when configure your
# container links, on depended containers
- "9200"
- "9300"
ulimits:
# Due to systemd/pam RLIMIT_NOFILE settings (max int inside the
# container), the Java process seams to allocate huge limits which result
# in a +unable to allocate file descriptor table - out of memory+ error.
# Lowering this value fixes the issue for now.
#
# See: http://bit.ly/2U62A80
# See: http://bit.ly/2T2Izit
nofile:
soft: 100000
hard: 100000
Install the nss-mdns package, enable and start the avahi-daemon.service. Then, edit the file /etc/nsswitch.conf and change the hosts line like this:
hosts: ... mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns ...
The magic environment variable is MDNS_HOSTNAME. Just pass it like that to your docker run command:
$ docker run --rm -e MDNS_HOSTNAME=something.else.local hausgold/elasticsearch
This will result in something.else.local.
You can also configure multiple aliases (CNAME's) for your container by passing the MDNS_CNAMES environment variable. It will register all the comma separated domains as aliases for the container, next to the regular mDNS hostname.
$ docker run --rm \
-e MDNS_HOSTNAME=something.else.local \
-e MDNS_CNAMES=nothing.else.local,special.local \
hausgold/elasticsearch
This will result in something.else.local, nothing.else.local and special.local.
By default .local is the default mDNS top level domain. This images does not force you to use it. But if you do not use the default .local top level domain, you need to configure your host avahi to accept it.
- Docker/mDNS demo: https://github.com/Jack12816/docker-mdns
- Archlinux howto: https://wiki.archlinux.org/index.php/avahi
- Ubuntu/Debian howto: https://wiki.ubuntuusers.de/Avahi/