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

时间:2016-04-16 13:56:27

标签: ubuntu docker openstack apt docker-machine

我使用docker-machine在我们的openstack私有云上设置了一个docker主机。一切都按预期进行。但是当我尝试使用ubuntu:14.04构建一个Dockerfile时,只需执行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 update。但是这个标志不适用于docker build命令。

我也尝试过这个建议的答案here

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

但它没有帮助。

如果我启动预构建映像和服务,不需要更新或安装程序包。一切都按预期工作。 我为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.

我完全迷失了,任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:1)

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

现在,如果您在实例中运行docker,docker会将默认MTU设置为1500.如果您启动容器并登录它,您将看到默认MTU为1500.您可以将其减少为1450或1420,看它是否有效。我遇到了同样的问题,在减少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/