问题:任何使用Dockerfile取决于centos,ubuntu或debian的构建都无法构建。
环境:我有一台Mac OS X,运行带有来宾Ubuntu 14.04的VMWare,运行Docker:
mdesales@ubuntu ~ $ sudo docker version Client version: 1.1.2 Client API version: 1.13 Go version (client): go1.2.1 Git commit (client): d84a070 Server version: 1.1.2 Server API version: 1.13 Go version (server): go1.2.1 Git commit (server): d84a070
行为:使用“ docker build”无法下载软件包。这里有这样Dockerfile的例子:https://github.com/Krijger/docker- cookbooks/blob/master/jdk8-oracle/Dockerfile,https://github.com/ottenhoff/centos- java/blob/master/Dockerfile
我知道我们可以使用–dns运行容器,但这是在构建期间。
从centos运行yum安装abc
从ubuntu RUN apt-get install abc
用户报告说,这可能是DNS配置问题,其他人则认为该配置已注释掉Google的DNS服务器。
Step 2 : RUN yum install -y curl; yum upgrade -y; yum update -y; yum clean all ---> Running in 5f11b65c87b8 Loaded plugins: fastestmirror Couldn't resolve host 'mirrorlist.centos.org
问题仍然存在…因此,#docker @ Freenode上的大多数用户都提到这可能是DNS配置问题…所以这是我的Ubuntu:
$ sudo cat /etc/resolv.conf nameserver 127.0.1.1 search localdomain
我试图改变那个,同样的问题…
问题
与#docker @ freenode上的一些开发人员交谈时,每个人都清楚这个问题:DNS和环境。在家里的常规Internet连接上,该构建工作正常。
解:
在具有专用DNS服务器的环境中,或者网络阻止Google的DNS服务器时,会发生此问题。即使docker容器可以ping 8.8.8.8,构建仍需要访问防火墙或数据中心后面的同一私有DNS服务器。
使用–dns开关启动Docker守护程序,以指向您的私有DNS服务器,就像配置了主机OS一样。这是通过反复试验发现的。
细节
我的MAC OS X(主机OS)在/etc/resolv.conf中配置了另一个DNS:
mdesales@Marcello-Work ~ (mac) $ cat /etc/resolv.conf search corp.my-private-company.net nameserver 172.18.20.13 nameserver 172.20.100.29
我的主机可能在构建时将数据包丢弃到Google的IP地址8.8.8.8。我只是将这两个IP地址放在Ubuntu的docker守护程序配置下:
mdesales@ubuntu ~ $ cat /etc/default/docker ... ... # Use DOCKER_OPTS to modify the daemon startup options. DOCKER_OPTS="--dns 172.18.20.13 --dns 172.20.100.29 --dns 8.8.8.8" ...
现在该版本可以按预期工作!
$ sudo ./build.sh Sending build context to Docker daemon 7.168 kB Sending build context to Docker daemon Step 0 : FROM centos ---> b157b77b1a65 Step 1 : MAINTAINER Marcello_deSales@intuit.com ---> Running in 49bc6e233e4c ---> 2a380810ffda Removing intermediate container 49bc6e233e4c Step 2 : RUN yum install -y curl; yum upgrade -y; yum update -y; yum clean all ---> Running in 5f11b65c87b8 Loaded plugins: fastestmirror Determining fastest mirrors * base: mirror.supremebytes.com * extras: centos.mirror.ndchost.com * updates: mirrors.tummy.com Resolving Dependencies --> Running transaction check ---> Package systemd.x86_64 0:208-11.el7 will be updated ---> Package systemd.x86_64 0:208-11.el7_0.2 will be an update ---> Package systemd-libs.x86_64 0:208-11.el7 will be updated ---> Package systemd-libs.x86_64 0:208-11.el7_0.2 will be an update --> Finished Dependency Resolution
感谢@BrianF和其他在IRC频道中提供帮助的人!
永久性VM解决方案-2015年7月2日更新
现在,我们将GitHub Enterprise和CoreOS Enterprise Docker Registry混在一起使用…因此,对我来说,从HOST机器添加公司DNS服务器以使VM也能正常工作非常重要。
用主机的/etc/resolv.conf替换来宾OS中的/etc/resolv.conf也解决了该问题!Docker 1.7.0版。我刚刚在VMWareFusion上使用Ubuntu 15.04创建了一个新的VM,再次遇到这个问题…
/etc/resolv.conf之前
~/dev/github/public/stackedit on ⭠ master ⌚ 20:31:02 $ cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 127.0.1.1 search localdomain
/etc/resolv.conf之后*
~/dev/github/public/stackedit on ⭠ master ⌚ 20:56:09 $ cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN search corp.mycompany.net nameserver 10.180.194.35 nameserver 10.180.194.36 nameserver 192.168.1.1