如何从 Windows 10 上的容器连接到 docker 主机(Docker for Windows)
Posted
技术标签:
【中文标题】如何从 Windows 10 上的容器连接到 docker 主机(Docker for Windows)【英文标题】:How to connect to docker host from container on Windows 10 (Docker for Windows) 【发布时间】:2017-04-06 09:35:18 【问题描述】:Docker 容器可以通过哪个 IP 地址连接到 Docker for Windows(在 Windows 10 上)上的主机?您如何找到此 IP 地址?
示例:您在 Windows 10 机器上的端口 1234 上运行了一项服务。容器内的程序必须访问此服务。程序应该使用什么 IP 地址连接到主机?
【问题讨论】:
在某些情况下是 10.0.0.2 您好,您的容器是 Windows 还是 Linux? 请参阅this link 以便能够从 Linux 容器访问 Windows 主机 【参考方案1】:我正在使用带有 Docker 版本 20.10.11 的 Windows 容器。我正在尝试访问在主机上运行的服务器。我尝试了所有其他答案/cmets。没有人为我工作。我试过了……
10.0.75.1 10.0.0.2 使用 --net="host" 启动(对于 docker-compose,"network_mode: host") 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
访问服务器就好了。
附注 - 预先运行配置脚本也可以解决问题……只是没有必要。 https://***.com/a/67434367/7991646
【讨论】:
【参考方案2】:在 Windows 10 上,启动 docker 容器后,您可以在命令行(cmd 或 Docker QuickStart Terminal 等)中运行 docker-machine ip
以获取 docker 容器的 IP 地址。这个ip地址一般是192.168.99.100。
【讨论】:
【参考方案3】:仅用于为 docker 工具箱用户添加注释。 简短的回答是:192.168.56.1
【讨论】:
【参考方案4】:主机将在容器使用的默认 DNS 中注册一个 host.docker.internal
。因此,您可以使用 curl http://host.docker.internal/
之类的东西来访问在您的机器上运行的 Web 服务器,即使该服务器正在另一个容器中运行,只要您公开了端口。
【讨论】:
【参考方案5】:允许您从容器连接到主机的选项之一是使用参数运行容器
--net="host"
例子:
docker run -it --net="host" container_name
然后从容器中,您可以使用以下方式连接到主机上的服务:
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/
在旧版本上,您可以使用在主机 -> 以太网适配器 -> IPv4 地址上执行命令 ipconfig 获得的 IP 地址连接到在主机 Windows 上运行的服务
更新
根据下面的 Datz 评论,docker.for.win.localhost
正在 Docker for Windows 中工作(已确认)。
【讨论】:
您的答案不适用于 Windows 和 Mac atm。--net="host"
仅适用于 Linux。在 Mac 上,您可以通过名称 docker.for.mac.localhost
访问主机,在 Windows 上没有这样的名称,您可以使用 ipconfig
获得桥 IP 地址
有趣;我在 Windows 上运行 18.03,并且 host.docker.internal 无法在容器内解析。
Windows 主机的 Docker 现在确实具有 DNS 名称 docker.for.win.localhost
对我来说,DNS 名称 host.docker.internal
可以访问,但 docker.for.win.localhost
不能。所以由于这个链接是最新的(Closed) Container can not resolve docker.for.win.localhost,我们可能会调用host.docker.internal
作为默认的DNS名称。
docker.for.win.localhost 仅在我从 linux 容器中使用它时才有效。它不适用于 Windows 容器【参考方案6】:
简答:在大多数情况下,您需要 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 防火墙允许与服务进行通信。
【讨论】:
您能否详细说明如何允许来自主机外部的连接? 这取决于您要连接的服务。大多数服务都有一个配置文件,您可以在其中指定允许连接到您的服务的 IP(范围)。 如果我想动态获取 IP,例如通过域名( ping 主机)怎么办?我正在尝试在 Azure(带有容器的 Windows Server 2016)中部署我的应用程序,但没有得到 10.0.75.1。 我尝试使用 DockerNAT ip 从我的 docker 容器连接到 windows 主机。它不起作用。如果此答案之前有效,则 docker for windows 中的某些内容已更改.. 此解决方案不再适用于 Docker for Windows v2.2.0 —— 他们完全移除了 DockerNAT 适配器,并且 10.0.75.1 不再是映射到主机的有效 IP 地址。见github.com/docker/for-win/issues/5538以上是关于如何从 Windows 10 上的容器连接到 docker 主机(Docker for Windows)的主要内容,如果未能解决你的问题,请参考以下文章
如何从 docker 容器中的 python 脚本连接到 localhost 上的 mysql 数据库
从 Windows 10 上的网络共享运行的应用程序无法连接到 SQL Server
如何从 Docker 容器中的 python 脚本连接到 Ubuntu 上的本地 SQL 服务器