繁体   English   中英

host.docker.internal 主机上正在运行什么?

[英]What is running on host.docker.internal host?

我只是好奇,host.docker.internal 主机上运行的是什么?

此服务将包从 docker 容器路由到主机网络上的服务。

但它到底是什么?

我发现它不是网关。

我将回答一些关于Linux实现的发现。 我敢打赌,Docker for Windows / Mac 的实现细节会有所不同。

简而言之: host.docker.internal是一个名称。 在您的主机上运行并绑定到也设置为 Docker 守护进程host-gateway的网络接口的每个服务,都可以从位于host.docker.internal:[service_port]的容器内部访问。

例子

$ docker run -it --rm --add-host=host.docker.internal:host-gateway alpine
/ # cat /etc/hosts
127.0.0.1   localhost
... (it has a few other lines here) ...
172.17.0.1  host.docker.internal 👈👈👈

这个怎么运作

  • --add-host :它将您在上面看到的最后一行添加到容器的/etc/hosts中,这样host.docker.internal解析为host-gateway的 IP 地址

  • host-gateway :通常是172.17.0.1 (默认网桥),但也可以使用dockerd进行配置,请参阅相关 文档👇:

 --host-gateway-ip ip IP address that the special 'host-gateway' string in --add-host resolves to. Defaults to the IP address of the default bridge

更多挖掘...

您可以检查添加此功能的拉取请求: #40007

用户描述他做了以下事情:

我做了什么
此 PR 允许容器通过将特殊字符串“host-gateway”附加到--add-host来连接到 Linux 主机,例如--add-host=host.docker.internal:host-gateway添加host.docker.internal DNS 条目在/etc/hosts中并将其映射到host-gateway-ip
此 PR 还添加了一个守护进程标志调用host-gateway-ip ,默认为默认网桥 IP
Docker Desktop 需要将此字段设置为主机代理 IP,以便可以将 host.docker.internal 的 DNS 请求路由到 VPNkit

历史背景

我认为这一切背后的历史或多或少如下:

  • Linux 用户可以使用默认网桥的 IP 地址访问主机服务。 Docker 设置网络的方式提供了这一点。
  • Windows / Mac 用户也需要访问主机,但由于操作系统不同,那里的网络更加复杂。 所以 Docker for Windows / Mac 引入了这个host.docker.internal东西。
  • Linux 用户也可以使用它,因为使用名称比使用 IP 地址更容易。

更多: 从 Docker 容器内部,如何连接到机器的本地主机?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM