For all platforms
Docker v 20.10 and above (since December 14th 2020)
Use your internal IP address or connect to the special DNS name host.docker.internal
which will resolve to the internal IP address used by the host.
This is for development purpose and does not work in a production environment outside of Docker Desktop.
Linux caveats
To enable this in Docker on Linux, add --add-host=host.docker.internal:host-gateway
to your docker
command to enable the feature.
To enable this in Docker Compose on Linux, add the following lines to the container definition:
extra_hosts:
- "host.docker.internal:host-gateway"
According to some users the special DNS name only works within the Docker's default bridge
network, not within custom networks.
For older macOS and Windows versions of Docker
Docker v 18.03 and above (since March 21st 2018)
Use your internal IP address or connect to the special DNS name host.docker.internal
which will resolve to the internal IP address used by the host.
Linux support pending https://github.com/docker/for-linux/issues/264
For older macOS versions of Docker
Docker for Mac v 17.12 to v 18.02
Same as above but use docker.for.mac.host.internal
instead.
Docker for Mac v 17.06 to v 17.11
Same as above but use docker.for.mac.localhost
instead.
Docker for Mac 17.05 and below
To access host machine from the docker container you must attach an IP alias to your network interface. You can bind whichever IP you want, just make sure you're not using it to anything else.
sudo ifconfig lo0 alias 123.123.123.123/24
Then make sure that you server is listening to the IP mentioned above or 0.0.0.0
. If it's listening on localhost 127.0.0.1
it will not accept the connection.
Then just point your docker container to this IP and you can access the host machine!
To test you can run something like curl -X GET 123.123.123.123:3000
inside the container.
The alias will reset on every reboot so create a start-up script if necessary.
Solution and more documentation here: https://docs.docker.com/desktop/networking/#use-cases-and-workarounds-for-all-platforms
curl: (7) Failed to connect to 172.17.1.78 port 7000: No route to host
– Acroterhost.docker.internal
also works, I just have to prependhttp://
before it for my Java config files for the URL. Hope it helps someone. – Irip
. If it's an ubuntu-based container you can doapt-get install iproute2
. – Anthropogenesissocat
and explained it in this blog post. – Emlin