I want to write a universal shell-script which will add a proper IP address of docker host machine to
/etc/hosts inside of container.
You will probably advice me to put the service I want to access in another docker container too but for fastest tests on CI I want to access docker host machine by ip from container, that's why I need it.
There was an issue on github with lot's of comments where people were asking to make unified way to access host ip. There is no common solution for all platforms atm.
People make scripts like this:
grep dockerhost /etc/hosts || echo $(ip r | grep ^default | cut -d" " -f3) dockerhost >> /etc/hosts
In order to access docker host machine I would like to use the same approach but it does not work for Mac atm. The result returned by:
ip r | grep ^default | cut -d" " -f3
will give a wrong answer
172.17.0.1 if Docker host machine is Mac (You won't be able actually to access your Mac from container with
That's why there is a feature in Docker for Mac - special hostname
docker.for.mac.localhost with which you can access your host Mac from container.
I would like to write a universal
shell script which will first try to resolve
docker.for.mac.localhost and add the resolved address to
/etc/hosts. If not (which means docker host is either windows or linux, not Mac), use the
ip r | grep ^default | cut -d" " -f3 approach and add to
The question is: How can I try to resolve
docker.for.mac.localhost in ANY container? (some distros do not have
nslookup for example). Or maybe I should not try to resolve and I can just try to read
docker.for.mac.localhost value from somewhere?
My current thoughts are to try to use
getent ahosts docker.for.mac.localhost, then in case command does not exist I will try to use
nslookup (i.e. Busybox image does not have
getent command). Probably I am wrong trying to resolve
docker.for.mac.localhost and it can be retrieved in easier way. Please share your thoughts.