我有一台安装了 Docker 的 Ubuntu 20.04.3 LTS(GNU/Linux 5.4.0-109-generic x86_64)服务器。我创建了一个 Bind9 容器,但它无法启动。原来这是因为 Ubuntu 上的解析器服务正在运行并控制了端口 53。
因此我终止了解析器服务,然后 Bind9 容器就会启动。
我现在遇到的问题是 Ubuntu 主机操作系统无法解析任何 DNS 名称。我编辑了 /etc/netplan/00-installer-config.yaml 以使用外部 DNS 服务器,但仍然没有结果。
YAML 文件内容:
# This is the network config written by 'subiquity'
network:
ethernets:
enp0s4:
dhcp4: no
addresses:
- 192.168.0.98/24
- 192.168.0.99/24
gateway4: 192.168.0.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
version: 2
答案1
systemd-resolved 监听端口53
。127.0.0.53
这个进程被配置为使用或不使用外部解析器。
由于您的容器拒绝启动,直到您终止系统解析器,我只能猜测它正在尝试监听53
通配符0.0.0.0
地址上的端口,这将是默认行为。
解决这个问题的直接方法是改变启动 Bind9 容器的方式,使其仅监听特定的 IP 地址。
正如评论中指出的那样,在环回上运行绑定并不是很有意义,因此请务必知道您的外部可访问 IP 地址(这里有一个如何获取它的示例):
ip=$(ip route get 1.1.1.1 | xargs -n1 | sed -ne '/^src$/,+1p' | tail -n1)
然后在该地址上为 Docker 容器发布 UDP 和 TCP 端口 53:
例如:
docker run --publish=${ip}::53 --public=${ip}::53/udp
或者
docker run -p=${ip}::53 -p=${ip}::53/udp
当然,还要恢复对系统解析器所做的所有更改。