我已执行预期配置,并且此功能以前可以正常工作。我之前所做的更改使此功能可以正常工作:
- 取消注释 /etc/default/lxc-net 中的 LXC_DOMAIN="lxc" 行
- 在 /etc/NetworkManager/dnsmasq.d/lxc.conf 中添加 server=/lxc/10.0.3.1 行
我还将 dnsmasq 实例的 IP 添加到主机上的 resolv.conf 中。
以前,这允许我使用容器名称上的后缀 .lxc(例如 test-container.lxc)或仅使用容器名称本身来 ping 我的容器。
现在我仍然可以仅使用容器名称 ping 我的容器,但是用于寻址我的容器的 .lxc 域版本似乎已停止工作,我不知道原因。
我还尝试将 server=/lxc/10.0.3.1 行添加到 /etc/dnsmasq.d/lxc,因为我在其他地方看到有人使用这种方法成功了,但我没有成功。
当我尝试 ping test-container.lxc 时得到的只是错误:
ping:未知主机 test-container.lxc
还有谁见过此问题并知道为什么这种行为发生了变化或者我可以做些什么来使此功能再次正常运行?
答案1
我在 Ubuntu 16.04 Server LTS(主机)中也遇到了同样的问题,无法让 LXC DNS 解析正常工作。我已遵循了几个指南,并将这些必需的条目添加到这些配置文件中,但容器仍然无法解析 .lxc -domain。但只有基于 IP 地址的命名有效。
由于我的主机环境是托管服务器环境,这可能是与防火墙相关的问题,服务提供商以某种方式在其防火墙或网络配置中阻止了 DNS 流量。请先检查您的 iptables 设置以确保无误。
然后,为了解决这个问题,请检查/etc/resolv.conf
和/etc/network/interfaces
内容以确保名称服务器 127.0.0.1 是解析这些 LXC/DNS 名称的服务器之一,并注释掉任何“搜索”条目,因为默认情况下,某些服务器主机提供商会替换或添加 Google 的 8.8.8.8,这显然无法解析本地/主机运行的 LXC DNS 名称。
要重新添加默认名称服务器,您可以添加一个/etc/resolvconf/resolv.conf/tail
包含名称服务器 127.0.0.1 内容的文件并运行sudo resolvconf -u
以重建解析器配置,然后再次尝试 ping 容器:(ping mycont.lxc
使用 LXC_DOMAIN/etc/default/lxc-net
作为 LXC-hostname 的后缀)。
上述内容解决了我的问题。
答案2
这在 16.04 上有效:
echo 'LXC_DOMAIN="lxc"' >> /etc/default/lxc-net
echo 'server=/lxc/10.0.3.1' >> /etc/dnsmasq.d/lxc
sed -i '1s;^;nameserver 127.0.0.1\n;' /etc/resolv.conf
apt-get install -y dnsmasq
sudo service lxc-net restart
为了确保/etc/resolv.conf
重启后仍然存在:
echo 'nameserver 127.0.0.1' >> /etc/resolvconf/resolv.conf.d/head
sudo resolvconf -u
笔记这将运行开放的 DNS 服务器,您应该使用防火墙或其他方式关闭它:
echo 'interface=lo' >> /etc/dnsmasq.conf
service dnsmasq restart