Docker Ubuntu的容器可以ping archive.ubuntu.com,但不能apt-get

我使用docker-machine在我们的OpenStack私有云上安装Docker主机。 一切都如预期。 但是当我尝试用ubuntu:14.04构buildDockerfile时,只需执行一个RUN apt-get update

 Ign http://archive.ubuntu.com trusty InRelease Ign http://archive.ubuntu.com trusty-updates InRelease ... 

永远,并超时。

然后我删除RUN apt-get update并运行docker build -t test .docker run -it test /bin/bash

在容器内我可以ping archive.ubuntu.com和任何其他域罚款。 我在我的resolve.conf中看到nameserver 8.8.8.8在那里。 但是当我尝试再次运行apt-get update时,我得到了相同的结果。

我试图用--dns 8.8.8.8标志运行容器,没有什么区别。 但是因为我的resolve.conf文件有DNS条目,而且我可以ping这些域名,所以这不应该成为问题。

如果我用--net=host标志运行容器,我可以apt-get更新。 但是这个标志不适用于docker build命令。

我也尝试了这个build议的答案,我在这里find。

 sudo apt-get install bridge-utils pkill docker iptables -t nat -F ifconfig docker0 down brctl delbr docker0 sudo service docker start 

但没有帮助。

如果我启动预构build映像和服务,不需要更新或安装软件包。 一切都按预期工作。 我已经尝试了许多重新安装和docker主机不同的云图像。 主机上没有运行防火墙软件。

与其他图像一起体验这个,例如centos yum update

 http://centos.uib.no/7.2.1511/os/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://centos.uib.no/7.2.1511/os/x86_64/repodata/repomd.xml: (28, 'Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds') Trying other mirror. 

我完全失去了,任何帮助将不胜感激!

我猜你正在OpenStack上运行一个实例? 这个问题最有可能是因为MTU。 为了给出一些背景知识,典型的OpenStack部署使用VXLAN或GRE,并且由于它们增加的开销,实例的默认MTU减less了(通过openstack组件中的configuration/类似)。 检查你的实例中的MTU,看看它的1500或更低。

现在,如果在实例中运行docker,docker会将默认MTU设置为1500.如果启动一个容器并login到它,您将看到默认的MTU为1500.您可以将其降低为1450或1420,看看它是否有效。 我遇到了同样的问题,减less了MTU后,它为我工作。

 ExecStart=/usr/bin/docker daemon -H fd:// --mtu=1450 

以下是如何更改docker中容器的MTU的详细步骤:

https://rahulait.wordpress.com/2016/02/28/modifying-default-mtu-for-docker-containers/