我使用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.
我完全迷失了,任何帮助都会非常感激!
答案 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/