How to connect to docker host from container on Windows 10 (Docker for Windows)
Solution 1:
Short answer: in most cases, you'll need 10.0.75.1 .
In Docker for Windows, the container communicates through a vEthernet adapter called DockerNAT. To find its details, open Command Prompt and type
ipconfig
Look for an entry that looks like
Ethernet adapter vEthernet (DockerNAT):
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::fd29:297:4583:3ad4%4
IPv4 Address. . . . . . . . . . . : 10.0.75.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
The IP address to the right of IPv4 Address
is the one you need.
Note: make sure the service allows connections from outside your host. As far as that service is concerned, your docker container is a different machine. Also make sure Windows Firewall allows communication to and from the service.
Solution 2:
One of options that allows you to connect from container to host, is to run your container with parameter
--net="host"
Example:
docker run -it --net="host" container_name
Then from container, you can connect to service on host using:
localhost:port
But in this case, you will not be able to link more containers using --link
parameter.
More on this topic: http://phillbarber.blogspot.sk/2015/02/connect-docker-to-service-on-parent-host.html
UPDATE:
From version 18.03, you can use DNS name host.docker.internal
, which resolves to the internal IP address used by the host.
More: https://docs.docker.com/docker-for-windows/networking/
On older versions, you can connect to service running on host Windows using IP address you get executing command ipconfig on host -> Ethernet adapter -> IPv4 Address
UPDATE
As per Datz comment below, docker.for.win.localhost
is working in Docker for Windows (confirmed).
Solution 3:
The host will have a host.docker.internal
registered in the default DNS used by containers. So you can use something like curl http://host.docker.internal/
to access a web server running on your machine even if that server is running in another container provided you exposed the port.
Solution 4:
Just for adding a note for docker toolbox users. Short answer is: 192.168.56.1
Solution 5:
On Windows 10, after your docker container is started, you can run docker-machine ip
in command line (cmd or Docker QuickStart Terminal, etc) to get the ip address of your docker container. This ip address is usually, 192.168.99.100.