运行(略作修改的)Ubuntu:16.04 docker 镜像,无法访问 DNS 服务器。这可以通过 ping google.com 的已解析 IP 地址(例如 172.217.4.142,该地址在另一台计算机上解析)来证明,但无法 ping google.com。
root@12345678910:/# ping -c 1 216.58.194.174
PING 216.58.194.174 (216.58.194.174) 56(84) bytes of data.
64 bytes from 216.58.194.174: icmp_seq=1 ttl=46 time=20.5 ms
--- 216.58.194.174 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 20.551/20.551/20.551/0.000 ms
root@12345678910:/# ping -c 1 google.com
ping: unknown host google.com
我搜索的大部分内容都是关于设置 DNS 标志的问题。不过,我尝试设置 DOCKER_OPTS 变量以/etc/default/docker
指向许多DNS 服务器:
DOCKER_OPTS="--dns 209.244.0.3 --dns 209.244.0.4 --dns 64.6.64.6 --dns 64.6.65.6 --dns 8.8.8.8 --dns 8.8.4.4 --dns 84.200.69.80 --dns 84.200.70.40 --dns 8.26.56.26 --dns 8.20.247.20 --dns 208.67.222.222 --dns 208.67.220.220 --dns 199.85.126.10 --dns 199.85.127.10 --dns 81.218.119.11 --dns 209.88.198.133 --dns 195.46.39.39 --dns 195.46.39.40 --dns 192.95.54.3 --dns 192.95.54.1 --dns 208.76.50.50 --dns 208.76.51.51 --dns 216.146.35.35 --dns 216.146.36.36 --dns 37.235.1.174 --dns 37.235.1.177 --dns 198.101.242.72 --dns 23.253.163.53 --dns 77.88.8.8 --dns 77.88.8.1 --dns 91.239.100.100 --dns 89.233.43.71 --dns 74.82.42.42 --dns 109.69.8.51"
以及设置 DNS 变量/etc/docker/daemon.json
(如所述这里):
{
"dns": [ "209.244.0.3", "209.244.0.4", "64.6.64.6", "64.6.65.6", "8.8.8.8", "8.8.4.4", "84.200.69.80", "84.200.70.40", "8.26.56.26", "8.20.247.20", "208.67.222.222", "208.67.220.220", "199.85.126.10", "199.85.127.10", "81.218.119.11", "209.88.198.133", "195.46.39.39", "195.46.39.40", "192.95.54.3", "192.95.54.1", "208.76.50.50", "208.76.51.51", "216.146.35.35", "216.146.36.36", "37.235.1.174", "37.235.1.177", "198.101.242.72", "23.253.163.53", "77.88.8.8", "77.88.8.1", "91.239.100.100", "89.233.43.71", "74.82.42.42", "109.69.8.51" ]
}
两次尝试均未成功。
(这些是列出的 DNS 服务器的所有 IP 地址生命线)
我想尝试的一个选择是重置 IP 表和网桥,但此建议太旧,不值得信任(例如docker -d
不再是有效命令)
一个可能的问题是,这台机器位于大学以太网上,必须使用机器的以太网硬件地址将其列入白名单。在 Ubuntu16 主机上,这是设备eno1
(如果我使用的术语正确的话)。我的第一个想法是,由于docker0
硬件地址不同,也许大学网络阻止了该流量。但我不认为这是问题所在,因为我仍然可以 ping 原始 IP 地址。也许查询 DNS 时在转换过程中丢失了某些内容?
有什么建议么?
版本信息:
- 主机:Linux 主机名 4.4.0-92-generic #115-Ubuntu SMP 星期四 8 月 10 日 09:04:33 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
- 容器:ubuntu:16.04,主机的 ping 已复制过来(没有互联网就无法使用 apt 安装)。
- Docker:Docker 版本 1.12.6,内部版本 78d1802
答案1
这最终成为大学网络的问题。我的理解是,他们以某种方式阻止了 DNS 请求,并且我们被指示在 docker 的配置中使用他们的内部 DNS 服务器地址。