
今天在 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 个人猜测是 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 访问容器里的服务,是不是自动做了端口映射 |