Mar*_*les 33 dns centos docker linux-containers
问题:任何构建,具有依赖于centos,ubuntu或debian的Dockerfile都无法构建.
环境:我有一台Mac OS X,运行VMWare,客户端为Ubuntu 14.04,运行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
Run Code Online (Sandbox Code Playgroud)
行为:使用"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 RUN 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
Run Code Online (Sandbox Code Playgroud)
问题仍然存在......所以,#docker @Freenode上的大多数用户提到它可能是DNS配置的问题......所以这是我的Ubuntu:
$ sudo cat /etc/resolv.conf
nameserver 127.0.1.1
search localdomain
Run Code Online (Sandbox Code Playgroud)
我试过改变那个,同样的问题......
Mar*_*les 42
问题
与#docker @ freenode的一些开发人员交谈时,每个人都清楚这个问题:DNS和环境.该版本在家中的常规Internet连接上运行良好.
解:
在具有专用DNS服务器的环境中,或网络阻止Google的DNS服务器时,会出现此问题.即使docker容器可以ping 8.8.8.8,构建仍然需要访问防火墙或数据中心后面的同一个私有DNS服务器.
使用--dns开关启动Docker守护程序以指向您的私有DNS服务器,就像配置主机操作系统一样.这是通过反复试验找到的.
细节
我的MAC OS X(主机操作系统)在我的/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
Run Code Online (Sandbox Code Playgroud)
我的主机可能会在建立时将数据包丢弃到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"
...
Run Code Online (Sandbox Code Playgroud)
构建现在按预期工作!
$ 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
Run Code Online (Sandbox Code Playgroud)
感谢@BrianF和其他在IRC频道帮助的人!
永久虚拟机解决方案 - 2015年7月2日更新
我们现在混合使用GitHub Enterprise和CoreOS Enterprise Docker Registry ...因此,从HOST机器添加企业DNS服务器对我来说非常重要,这样才能使VM运行起来.
使用主机的/etc/resolv.conf替换来宾操作系统中的/etc/resolv.conf也解决了这个问题!Docker 1.7.0.我刚刚在VMWare Fusion上使用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
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
小智 8
我有同样的问题.提供的解决方案在我的案例中没有帮助.但是我很快就更新了我的Dockerfile,为其中的代理添加了环境变量.
ENV HTTP_PROXY http://<proxy_host>:<port>
ENV HTTPS_PROXY http://<proxy_host>:<port>
ENV http_proxy http://<proxy_host>:<port>
ENV https_proxy http://<proxy_host>:<port>
Run Code Online (Sandbox Code Playgroud)
小智 5
这可能是由于您的本地缓存名称服务器侦听127.0.1.1,无法从容器内访问.
尝试将以下内容放入您的Dockerfile:
CMD "sh" "-c" "echo nameserver 8.8.8.8 > /etc/resolv.conf"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36772 次 |
| 最近记录: |