如何从 Windows 10 上的容器连接到 docker 主机(Docker for Windows)

How to connect to docker host from container on Windows 10 (Docker for Windows)

docker 容器可以在哪个 IP 地址连接到其 Docker 上的主机 Windows(在 Windows 10 上)?你如何找到这个 IP 地址?

示例:您在 Windows 10 机器上的端口 1234 有一个服务 运行。容器内的程序必须访问此服务。程序应使用哪个 IP 地址连接到主机?

简答:在大多数情况下,您需要 10.0.75.1 .

在 Docker for Windows 中,容器通过名为 DockerNAT 的 vEthernet 适配器进行通信。要查找其详细信息,请打开命令提示符并键入

ipconfig

寻找类似

的条目
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 . . . . . . . . . :

IPv4 Address右边的IP地址就是你需要的。

注意:确保服务允许来自主机外部的连接。就该服务而言,您的 docker 容器是另一台机器。还要确保 Windows 防火墙允许与服务的通信。

允许您从容器连接到主机的选项之一是运行您的带有参数

的容器

--net="host"

示例:

docker run -it --net="host" container_name

然后从容器中,您可以使用以下方式连接到主机上的服务:

localhost:port

但在这种情况下,您将无法使用 --link 参数 link 更多容器。

有关此主题的更多信息: http://phillbarber.blogspot.sk/2015/02/connect-docker-to-service-on-parent-host.html

更新:

从版本 18.03 开始,您可以使用 DNS 名称 host.docker.internal,解析为主机使用的内部 IP 地址。

更多:https://docs.docker.com/docker-for-windows/networking/

在旧版本上,您可以连接到主机 Windows 上的服务 运行ning 使用 IP 地址在主机上执行命令 ipconfig -> 以太网适配器 -> IPv4 地址

更新 根据下面的 Datz 评论,docker.for.win.localhost 在 Docker 中工作 Windows(已确认)。

主机将在容器使用的默认 DNS 中注册 host.docker.internal。因此,您可以使用 curl http://host.docker.internal/ 之类的东西来访问您计算机上的 Web 服务器 运行,即使该服务器 运行 在另一个容器中,只要您公开了端口。

只是为了给 docker 工具箱用户添加注释。 简短的回答是:192.168.56.1

在 Windows 10 上,在您的 docker 容器启动后,您可以 运行 docker-machine ip 在命令行(cmd 或 Docker QuickStart Terminal,等)获取您的 docker 容器的 IP 地址。这个 ip 地址通常是 192.168.99.100.

我正在使用 Windows 版本为 Docker 20.10.11 的容器。我正在尝试访问主机上的服务器 运行。我尝试了所有其他 answers/comments。 None 正在为我工​​作。我试过了...

  • 10.0.75.1
  • 10.0.0.2
  • 使用 --net="host" 启动(对于 docker-compose、“network_mode:主机”)
  • host.docker.internal
  • docker.for.win.localhost
  • 192.168.56.1
  • 192.168.99.100
  • 主机上每个 vEthernet 适配器的 IP

我可以通信的唯一方法是在主机(而不是容器)上使用标准以太网适配器的 IPv4:

使用curl http://10.0.0.4:8080访问服务器就好了。

旁注 - 运行 预先配置脚本也可以解决问题...只是没有必要。

好奇怪,2020年4月了,这还是一道题。大多数“host.docker.internal”和“172.17.0.1”不适用于 WINDOWS docker.

所以,我建议 windows docker 用户,只需在 cmd 中输入“ipconfig”即可:

你会为你的 windows(主机)机器获得一些 ips:

然后,在您的 docker 中,安装“ping/curl/ifconfig/telnet”,然后键入“ifconfig”以获取您的“docker”IP 地址,然后键入“ping

这需要您安装外部工具到 docker,但它值得。