How to resolve docker host names (/etc/hosts) in containers
how is it possible to resolve names defined in Docker host’s /etc/hosts in containers?
Containers running in my Docker host can resolve public names (e.g. www.ibm.com) so Docker dns is working fine.
I would like to resolve names from Docker hosts’s (e.g. 127.17.0.1 smtp) from containers.
My final goal is to connect to services running in Docker host (e.g. smtp server) from containers. I know I can use the Docker Host IP (127.17.0.1) from containers, but I thought that Docker would have used the Docker host /etc/hosts to build containers’s resolve files as well.
I am even quite sure I have seen this working a while ago… but I could be wrong.
2 Solutions collect form web for “How to resolve docker host names (/etc/hosts) in containers”
Check out the
--add-host flag for the
docker command: https://docs.docker.com/engine/reference/run/#managing-etchosts
$ docker run --add-host="smtp:127.17.0.1" container command
/etc/hosts cannot be overwritten or modified at runtime (security feature). You need to use Docker’s API, in this case
--add-host to modify the file.
docker-compose, use the
For the whole “connect to services running in host” problem, see the discussion in this GitHub issue: https://github.com/docker/docker/issues/1143.
The common approach for this problem is to use
--add-host with Docker’s gateway address for the host, e.g.
--add-host="dockerhost:172.17.42.1". Check the issue above for some scripts that find the correct IP and start your containers.
You can setup on host simple DNS server, and in container setup /etc/resolve.conf to Docker host DNS server.
For example in dnsmasq you can add
addn-hosts=/etc/hosts to config file. So container, by using Docker host DNS server, will be able to resolve hosts /etc/hosts.