一尘不染

Dockerfile:Docker构建无法下载软件包:centos-> yum,debian / ubuntu-> apt-get进入内部网

docker

问题:任何使用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

从centos运行yum安装abc

  • ubuntu

从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

我试图改变那个,同样的问题…


阅读 658

收藏
2020-06-17

共1个答案

一尘不染

问题

与#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
2020-06-17