我的 mdns 地址 myhost.local 错误地绑定到 Docker 虚拟网络,而不是我的 wifi 网络

我的 mdns 地址 myhost.local 错误地绑定到 Docker 虚拟网络,而不是我的 wifi 网络

TL;DR:我怎样才能myhost.local解析我的 wifi 接口而不是 Docker 虚拟网络?

我的桌面系统的主机名是“myhost”(来自/etc/hostnameetc),运行的是 Ubuntu 18.04。该ip a命令告诉我,我的 wifi ip 地址是192.168.0.6,而我很少使用的 docker-network ip 地址是172.17.0.1

我喜欢使用 mdns/Avahi 通过“myhost.local”访问我的桌面,例如当从我家局域网上的其他主机连接到本地 jupyter 笔记本时。

由于某种原因,mdns 分配了两个地址给myhost.local

$ host myhost.local
myhost.local has address 192.168.0.6
myhost.local has address 172.17.0.1
myhost.local has IPv6 address fe80::46da:e48:c3c0:112

Jupyter 笔记本正在运行ip=192.168.0.6

几个月前,当我ping myhost.local或连接到http://myhost.local:8888/它时,它可以工作,但现在它尝试 172.17.0.1 地址,这对 jupyter 不起作用。

这似乎与 Docker 社区论坛上未解答的问题有关:Docker 网络接口干扰 mDNS 地址

更新:回答一个问题,这是 hosts 文件。我认为它来自 Ubuntu 设置 hosts 文件的默认方式,因此localhost实际上与 并不相同myhost,但我可能对其进行了调整。

$ cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       myhost

奖金更新

user10489正确地指出其他主机将myhost.local通过 mdns 很好地解析。而我的潜在问题是我想知道在我的网络中配置什么 ip 地址才能jupyter notebook使其在我的无线局域网上可用。只是我们没有看到在网络上使用 mdns 的简单方法当地的机器来获取答案。

对此的决议潜在的问题是这样的,只是弄清楚我在给定接口上拥有哪个 IP 地址(这里用 Ubuntu 的尴尬的第一个无线网络名称来说明):

dev=wlp3s0
ip=$(ip -br -o a show $dev | (read interface status ip ip6; echo ${ip%/*}))
jupyter notebook --no-browser --ip=$ip

答案1

默认情况下,这里有多个名称解析机制处于活动状态:

  • /etc/hosts
  • 域名系统
  • 域名系统

这是默认顺序,mdns 通常会尝试解析 *.local

但也要考虑两台机器(本地机器和远程机器)分别的情况。

因此,如果您希望 myhost.local 解析到特定接口而不禁用其他接口上的 mdns,您应该能够直接在 /etc/hosts 中放置一个覆盖。但是,这只会影响本地计算机。

远程机器将使用它们听到的任何 mdns 广播来解析 myhost.local。因此,如果它们位于您的 docker 网络和您的 lan 上(就像您的本地机器一样),它们将从 mdns 获取所有这些地址。如果它们仅在其中一个网络上,它们应该只会看到与该网络相对应的地址。

因此,解决方案可能不是改变配置,而是改变您用来提出问题的主机。

答案2

阅读 avahi 守护进程配置文件 (/etc/avahi/avahi-daemon.conf) 的手册页,看起来您可以指定明确想要拒绝的接口:

拒绝接口=设置应被 avahi-daemon 忽略的网络接口的逗号分隔列表。除非设置了允许接口,否则将使用其他未指定的接口。此选项优先于拒绝接口。

因此,也许可以尝试将行“deny-interfaces=docker0”添加到该文件(始终备份原始文件!),然后使用“avahi-daemon --reload”重新加载。将“docker0”更改为您的 docker 接口的名称,尽管我认为这是默认名称。

https://linux.die.net/man/5/avahi-daemon.conf

http://manpages.ubuntu.com/manpages/bionic/man8/avahi-daemon.8.html

相关内容