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.
RemiX
Updated on July 05, 2022Comments
-
RemiX almost 2 years
At which IP address can a docker container connect to its host on Docker for Windows (on Windows 10)? How do you find this IP address?
Example: you have a service running at port 1234 on your Windows 10 machine. A program inside your container must access this service. What IP address should the program use to connect to the host?
-
PeterE about 7 yearscould you expand on how to allow connections from outside your host?
-
RemiX about 7 yearsThis depends on the service you want to connect to. Most services have a configuration file in which you can specify an IP (range) that is allowed to connect to your service.
-
RemiX about 7 yearsAs I understand from my attempts and this answer,
--net="host"
does not enable port mapping (say port 80 to 8000) and can cause conflicts between port numbers on the host and those in the Docker container (e.g. if both the host and the container have Apache running on port 80). -
Marcel de Castilho almost 7 yearsWhat if I want to get the IP dinamically, for instance by domain name ( ping host)? I'm trying to deploy my app in Azure (Windows Server 2016 with Containers) wich doesn't get 10.0.75.1.
-
Kirill over 6 yearsYour answer does not work for Windows and Mac atm.
--net="host"
only works for Linux. On Mac you can access host Machine by namedocker.for.mac.localhost
, on Windows there is no such name and you can get bridge IP address withipconfig
-
Rohaq about 6 yearsInteresting; I'm running 18.03 on Windows, and host.docker.internal fails to resolve inside the container.
-
Datz about 6 yearsThe Docker for windows host now does have the DNS name
docker.for.win.localhost
-
Liero over 5 yearsand when I have multiple containers running?
-
Natta Wang over 5 yearsTo me, the DNS name
host.docker.internal
can be accessed butdocker.for.win.localhost
cannot. So due to this link that is most updated (Closed) Container can not resolve docker.for.win.localhost, We might call to thehost.docker.internal
for the default DNS name. -
Sathish over 5 yearsI tried to connect from my docker container to the windows host using the DockerNAT ip.. It doesn't work. If this answer was working before, something in docker for windows has changed..
-
KMC over 4 yearsdocker.for.win.localhost only works when i use it from linux container. It doesn't work from windows container
-
Vitalii Ilchenko over 4 years@Sathish from what I've found,
DockerNAT
is used by Linux containers. In case if you switched your Docker to use "Windows containers" then you have to check the IP address of vEthernet adapter which is callednat
-
Mr. T about 4 yearsThis solution no longer works in Docker for Windows v2.2.0 -- they completely removed the DockerNAT adapter, and 10.0.75.1 is no longer a valid IP address mapping to the host. See github.com/docker/for-win/issues/5538
-
Triynko about 3 yearsThis information is completely outdated and does not work with latest docker.
-
Siwei about 2 yearsnot always work in my Linux&Windows machine
-
Michael M. almost 2 yearsThe name
host.docker.internal
works in the latest Docker Desktop for Windows (4.8.2)