Aim: Get a docker container to use the DNS provided by the host machine, which is a consul agent running in another container, to access services available via traefik reverse proxy.
Setup Host machine: Ubuntu 16.04.2 LTS
Registrator registers new containers to the consul agent, traefik is the reverse proxy to load balance the services and make them available. There is a general node app which returns "Hello World" when you hit the '/' path
Container 1.
docker run -d --net=host consul agent -dev
Container 2.
docker run -d --name=registrator --net=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest consul://localhost:8500
Container 3.
docker run -d --net=host -p 8089:8080 -p 80:80 --name=traefik -v ~/projects/traefix/docker.toml:/etc/traefik/traefik.toml traefik
Container 4.
docker run -P -d meep/node-web-app
Host machine using Network Manager
The host machine is setup so any lookups for the consul TLD it will resolve to the consul docker container
/etc/NetworkManager/dnsmasq.d/10-consul
server=/consul/127.0.0.1#8600
I have /etc/NetworkManager/dnsmasq.d/docker-bridge.conf with the following config which means it will listen for DNS requests on the docker network interface.
listen-address=172.17.0.1
Currently on my host machine I can do the following
- dig node-web-app.service.consul returns the ip address of 127.0.0.1
- curl http://node-web-app.service.consul/ returns 'Hello World'
So far so good everything working on the host.
I boot up a container like
docker run --dns=172.17.0.1 -it joffotron/docker-net-tools
and run dig node-web-app.service.consul it returns 127.0.0.1, well at least the dns is partly working. Clearly if I now run curl http://node-web-app.service.consul/ it will break as the dns lookup is pointing to 127.0.0.1, when it should point to 172.17.0.1
Forgive me, I've not really work with docker + service discovery So what can I do so the containers DNS correctly point to 172.17.0.1 ?