今天在 mac 上刚装的 OrbStack ,有一点想不通,启动 OrbStack 后就运行了这个命令启动容器,
docker run -d -p 8080:80 docker/getting-started
然后就能通过浏览器访问 http://orb.local/,直接看到下面的页面
然后直接浏览器访问容器的 domain-name ,也就是上图红框里的地址,就能直接访问容器服务页面,连 8080 端口号都不用加。
容器之间可以通过容器名互通我是知道的,但是我的宿主机是怎么直接通过"容器名"访问到容器的呢,我看了我本机的 hosts 文件都没有变化啊。
这是什么原理呀,有没有大佬知道这个容器名和 ip:port 的映射是在哪里看?
1
phpfpm 2023-09-04 05:26:59 +08:00 via Android
我猜做了反代?
|
2
airyland 2023-09-04 05:29:52 +08:00
Docker 本身就支持 add host, 看起来底层是 Linux namespace, 不需要显式配置在 /etc/hosts 中。
|
3
ysc3839 2023-09-04 05:52:00 +08:00 via Android 1
个人猜测是 mDNS
|
4
loganovo OP @airyland add host 不是修改的是 docker 容器的 hosts 吗,我这个更像是修改了我宿主机的 hosts
|
5
loganovo OP @phpfpm 但无法解释容器名是怎么在物理机上解析成 ip 的,我在物理机 ping 容器名,直接就能得到 docker 网桥下的容器 ip
|
7
sky96111 2023-09-04 09:06:55 +08:00
@loganovo 就是 mDNS ,你删除掉 host 的 nss-mdns 包和 avahi 或关闭 systemd-resolved 的 Multicast DNS 再试试,应该就不能解析了。这几个包提供了 Linux 上的 mDNS
|
8
keling 2023-09-04 09:35:16 +08:00
.local 就是用的 mDNS 。
只不过我有另外一个问题,为什么宿主机上可以直接通过 127.0.0.1 访问容器里的服务,是不是自动做了端口映射 |