TL;DR:我怎样才能myhost.local
解析到我的 wifi 接口而不是 Docker 虚拟网络?
我的桌面系统的主机名是“myhost”(来自/etc/hostname
etc),运行 Ubuntu 18.04。该ip a
命令告诉我,我的 wifi ip 地址是192.168.0.6
,而我很少使用的 docker-network ip 地址是172.17.0.1
。
我喜欢使用 mdns/Avahi 通过“myhost.local”访问我的桌面,例如,当从我家 LAN 上的其他主机连接到本地 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
当 Iping myhost.local
或 connect to http://myhost.local:8888/
it 几个月前工作时,但现在它尝试 172.17.0.1 地址,这对 jupyter 不起作用。
这似乎与 Docker 社区论坛上未回答的问题有关:Docker 网络接口干扰 mDNS 地址。
更新:回答一个问题,这是主机文件。我认为它来自 Ubuntu 设置 hosts 文件的默认方式,因此localhost
实际上与myhost
.
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 myhost
奖金更新
user10489
正确地指出其他主机将myhost.local
通过 mdns 解析就好了。我的根本问题是我想知道要在jupyter notebook
我的无线局域网上配置什么 IP 地址。只是我们没有看到在本地机器上使用 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
阅读 avahi daemon conf 文件 (/etc/avahi/avahi-daemon.conf) 的手册页,您似乎可以指定明确要拒绝的接口:
因此,也许可以尝试将“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
默认情况下,这里有多种名称解析机制处于活动状态:
这是默认顺序,mdns 通常会尝试解析 *.local
但也要考虑两台机器的情况——本地机器和远程机器。
因此,如果您希望 myhost.local 解析到特定接口而不禁用其他接口上的 mdns,您应该能够在 /etc/hosts 中进行覆盖。但是,这只影响本地机器。
远程机器将使用它们听到的任何 mdns 广播解析 myhost.local。因此,如果它们在您的 docker 网络和您的 lan(就像您的本地计算机一样)上,他们将从 mdns 获取所有这些地址。如果他们只在其中一个网络上,他们应该只看到与该网络对应的地址。
因此,也许解决方案不是更改配置,而是更改您用来提问的主机。