OrbStack 的 domain names 原理是什么啊?

2023-09-04 04:46:17 +08:00
 loganovo

今天在 mac 上刚装的 OrbStack ,有一点想不通,启动 OrbStack 后就运行了这个命令启动容器,

docker run -d -p 8080:80 docker/getting-started

然后就能通过浏览器访问 http://orb.local/,直接看到下面的页面

然后直接浏览器访问容器的 domain-name ,也就是上图红框里的地址,就能直接访问容器服务页面,连 8080 端口号都不用加。
容器之间可以通过容器名互通我是知道的,但是我的宿主机是怎么直接通过"容器名"访问到容器的呢,我看了我本机的 hosts 文件都没有变化啊。
这是什么原理呀,有没有大佬知道这个容器名和 ip:port 的映射是在哪里看?

2527 次点击
所在节点    程序员
8 条回复
phpfpm
2023-09-04 05:26:59 +08:00
我猜做了反代?
airyland
2023-09-04 05:29:52 +08:00
Docker 本身就支持 add host, 看起来底层是 Linux namespace, 不需要显式配置在 /etc/hosts 中。
ysc3839
2023-09-04 05:52:00 +08:00
个人猜测是 mDNS
loganovo
2023-09-04 06:23:54 +08:00
@airyland add host 不是修改的是 docker 容器的 hosts 吗,我这个更像是修改了我宿主机的 hosts
loganovo
2023-09-04 06:38:03 +08:00
@phpfpm 但无法解释容器名是怎么在物理机上解析成 ip 的,我在物理机 ping 容器名,直接就能得到 docker 网桥下的容器 ip
loganovo
2023-09-04 06:45:50 +08:00
@ysc3839 搜了一下,还真的像是 mdns ,我访问的地址就是以 .local 结尾的
sky96111
2023-09-04 09:06:55 +08:00
@loganovo 就是 mDNS ,你删除掉 host 的 nss-mdns 包和 avahi 或关闭 systemd-resolved 的 Multicast DNS 再试试,应该就不能解析了。这几个包提供了 Linux 上的 mDNS
keling
2023-09-04 09:35:16 +08:00
.local 就是用的 mDNS 。
只不过我有另外一个问题,为什么宿主机上可以直接通过 127.0.0.1 访问容器里的服务,是不是自动做了端口映射

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/970629

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX