我在 Ubuntu 14.04 LTS 上使用 docker 1.7.1,内核为 3.13.0-55。Docker 使用以下选项启动
DOCKER_OPTS="--bip=172.17.42.1/24 --dns=172.17.42.1 --dns=8.8.8.8"
确保容器的 IP 范围固定。我想使用一个容器作为所有其他容器的 DNS 服务器(请参阅上面的 dns 配置选项)。因此,我启动了我的 DNS 容器,并将端口绑定到 172.17.42.1:53/udp:
$ docker inspect --format='{{.HostConfig.PortBindings}}' mydns map[53/udp:[{172.17.42.1 53}]]
我可以使用 ip 从我的主机查询 DNS 服务器172.17.42.1,但不能从任何容器内部:
$ nslookup some-host 172.17.42.1 ;; connection timed out; no servers could be reached
我尝试使用 iptables 明确允许这一点,如下所示
iptables -A INPUT -s 172.17.42.1 -d 172.17.42.1 -p udp -m udp --dport 53 -j ACCEPT
但它仍然不起作用。
您知道可能存在什么问题吗?
[编辑] 这是由 tcpdump 捕获并由 Wireshark 可视化的从容器发出的 DNS 查询的结果: