默认情况下,dns.mode 中会lxd
创建桥接网络managed
。此模式的一个特点是所有容器都可以通过名称(而不仅仅是 IP 地址)相互查看。例如,从容器“ c1
”中,我可以使用 向默认名称服务器查询另一个容器 c2 的 IP 地址nslookup c2
。
这很酷。
但它在主机上不起作用。我知道我可以查询lxc list
容器的 IP 地址,但如果我只想要一个简单的,那么这样做很麻烦ssh root@c1
。
当我意识到解决方案需要自定义dnsmasq
为桥梁提供名称的设置时,我便想到了这一点。当我发现最佳候选设置是时,我放弃了--auth-server
。那人说
配置 dnsmasq 以充当权威 DNS 服务器非常复杂,因为它涉及配置外部 DNS 服务器来提供委派。
我不想在外部 (dyn)dns 服务上注册我的家庭动态 IP 网络。我只希望容器名称在主机中可见(甚至在我的整个局域网上都可见)
答案1
添加行
server=/lxd/10.150.161.1
到你的 /etc/dnsmasq.conf 并重启 dnsmasq 服务。之后
nslookup ‹containter_name›.lxd
应该管用。
这假设您使用当前默认设置,即运行 dnsmasq 守护程序作为本地 DNS 服务器(检查您的 /etc/resolv.conf 是否将 127.0.0.x 列为名称服务器)。引用的配置行指示此名称服务器查询 10.150.161.1 以获取 .lxd 域中的地址。辅助 dnsmasq 在那里运行,它由 LXD 安装设置 — 这是您的容器所监听的。
答案2
为了能够从您的主机通过主机名访问您的容器,您需要运行以下命令:
resolvectl dns lxdbr0 [lxdbr0 IP]
resolvectl domain lxdbr0 lxd
执行以上两个命令后应该就可以正常工作了。