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

Rem*_*miX 41 networking hyper-v virtual-machine docker windows-10

Docker容器可以在Docker for Windows上连接到其主机的IP地址(在Windows 10上)?你怎么找到这个IP地址?

示例:您在Windows 10计算机上的端口1234上运行了一项服务.容器内的程序必须访问此服务.程序使用什么IP地址连接到主机?

Rem*_*miX 66

简短的回答:在大多数情况下,你需要10.0.75.1.

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

ipconfig
Run Code Online (Sandbox Code Playgroud)

寻找一个看起来像的条目

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 . . . . . . . . . :
Run Code Online (Sandbox Code Playgroud)

右侧的IP地址IPv4 Address是您需要的IP地址.

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

  • 此信息已完全过时,并且不适用于最新的 docker。 (5认同)
  • 该解决方案在 Docker for Windows v2.2.0 中不再有效——它们完全删除了 DockerNAT 适配器,并且 10.0.75.1 不再是映射到主机的有效 IP 地址。请参阅 https://github.com/docker/for-win/issues/5538 (2认同)

小智 23

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

--net="host"

例:

docker run -it --net="host" container_name
Run Code Online (Sandbox Code Playgroud)

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

localhost:port

但在这种情况下,您将无法使用--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/

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

更新 根据以下Datz评论,docker.for.win.localhost正在使用Docker for Windows(已确认).

  • 您的答案不适用于Windows和Mac atm.`--net ="host"`仅适用于Linux.在Mac上,您可以通过名称`docker.for.mac.localhost`访问主机,在Windows上没有这样的名称,您可以使用`ipconfig`获取桥接IP地址 (10认同)
  • Docker for Windows主机现在确实有DNS名称`docker.for.win.localhost` (9认同)
  • 有趣的; 我在 Windows 上运行 18.03,并且 host.docker.internal 无法在容器内解析。 (2认同)
  • 对我来说,可以访问 DNS 名称 `host.docker.internal`,但不能访问 `docker.for.win.localhost`。所以由于这个链接是最新的[(Closed) Container can not resolve docker.for.win.localhost](https://github.com/docker/for-win/issues/1764#issuecomment-416154726),我们可能会调用`host.docker.internal` 来获取默认的 DNS 名称。 (2认同)
  • docker.for.win.localhost 仅当我从 Linux 容器使用它时才有效。它不适用于 Windows 容器 (2认同)

Arc*_*ano 14

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


Siw*_*申思维 10

真奇怪,2022年4月了,这还是一个问题。和大多数的host.docker.internal172.17.0.1用于 WINDOWS docker。

所以,我建议 Windows docker 用户只需ipconfig在 cmd 中简单输入:

您将获得 Windows(主机)计算机的一些 ip:

在此输入图像描述

然后,在你的docker中,安装ping/curl/ifconfig/telnet,然后输入ifconfig以获取你的“docker”的ip地址,然后输入ping <WINDOWS_HOST_IP>以查看ip是否正确。

这需要你向 docker 安装外部工具,但这是值得的。