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