Ubuntu docker容器无法更新apt-get update

时间:2017-10-01 19:32:35

标签: ubuntu docker dns

所以我的docker安装有一个相当奇怪的问题:

如果我跑

apt-get update

内部例如一个debian容器(docker run -it --rm debian)它总是失败,错误如

Err:1 http://security.ubuntu.com/ubuntu xenial-security InRelease
Temporary failure resolving 'security.ubuntu.com'

现在这似乎是一个DNS问题,正如许多其他类似帖子中所讨论的那样,但是我在这个问题上引起了反思:当我尝试ping主机时

ping security.ubuntu.com

它完美无缺。域名得到解决,ping工作正常。 e.g。

$ docker run -it —rm debian
root@0b6a6ec41a37:/# ping google.com
PING google.com (172.217.19.174): 56 data bytes
64 bytes from 172.217.19.174: icmp_seq=0 ttl=55 time=0.943 ms

然后我在busybox容器(nslookup)中尝试了docker run -it --rm busybox,这也很好。

我开始调查这个因为我想用docker设置nextcloud并且管理界面报告服务器无法验证有效的互联网连接,因为它无法解决,例如github.com。

当我连接到正在运行的nextcloud容器并在那里的命令行上进行测试时,下一个惊人的位置出现了。 ping再次正常工作,这次即使apt-get update也有效!

我已经在ufw启用和禁用的情况下完成了这些测试。结果相同。

我现在对发生的事情感到很困惑。在我的服务器或我周围的网络上,有些东西一定是错的,但我无法弄清楚问题是什么。

如果某人已经有这样的问题,那么听听您的采取/解决方案会很棒。谢谢:))

环境:
主持人:Ubuntu 16.04.03-LTS
Docker:17.09.0-ce

我的daemon.json

{
    "graph": "/mnt/nfs/nas/docker",
    "iptables": true,
    "dns": ["10.0.16.1"],
    "userland-proxy": true,
    "ip": "127.0.0.1"
}

//编辑02-10-2017

关于resolv.conf和DNS设置:是的,我尝试省略daemon.json中的“dns”字段,然后它只取主机resolv.conf中的值,我也尝试使用“8.8.8.8”结果相同。我的主机resolv.conf包含:

nameserver 10.0.16.1

2 个答案:

答案 0 :(得分:0)

我似乎修好了它,但我不完全确定修复它的部分。 我做了以下事情:

经过大量试验和失败后,我决定从我的系统中彻底清除docker和所有相关文件夹(我还删除了剩余的桥并重置了我的iptables),只留下daemon.json仅包含:

{
  "graph": "/mnt/nfs/nas/docker"
}
然后我重新安装了docker。它没有创建/var/lib/docker文件夹,因为我将NFS卷指定为图根。然后我再次尝试,但这次它甚至无法启动容器! docker info给了我一个“警告”,我的nfs分享不支持“d_type”。然后我停止了docker,删除了daemon.json并重新启动了。这当然创建了/var/lib/docker,现在我可以启动容器,一切正常。

我想我对docker配置和网桥的清除修复了它,或者我之前将图形根移动到我的nfs卷上就打破了它。

所以一切都表现得应该如此但我仍然希望将我的音量放在我安装的NAS音量上。我可以切换到一个不同的FS驱动程序用于docker,也许它从一开始就可以工作。

答案 1 :(得分:0)

docker run -it --network host --rm debian

请注意添加的--network host