我在公司网络上构建Docker映像时遇到问题。我刚刚开始使用Docker,因此我有一个用于hello-world类型应用程序的以下Dockerfile:
# DOCKER-VERSION 0.3.4 FROM centos:6.4 # Enable EPEL for Node.js RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm # Install Node.js and npm RUN yum install -y npm # Bundle app source ADD . /src # Install app dependencies RUN cd /src; npm install EXPOSE 8080 CMD ["node", "/src/index.js"]
当我在家中通过自己的无线网络在笔记本电脑上构建笔记本电脑时,这种方法效果很好。它拉下必要的依赖关系并正确构建映像。
但是,当我在公司网络上工作时,尝试从download.fedoraproject.org拉下RPM时,此同一个Docker构建失败,并显示以下错误消息:
第2步:运行rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel- release-6-8.noarch.rpm -–>在e0c26afe9ed5 curl中运行:(5)无法t解决代理“ some.proxy.address”错误:跳过http://download.fedoraproject.org/pub/epel/6/i386/epel- release-6-8.noarch.rpm-传输失败
在公司网络上,我可以从笔记本电脑访问该URL。但是,一旦Docker尝试构建容器,突然之间它根本无法解决。对于多种外部资源(apt- get等),此行为是相同的:它们都可以在公司网络上的笔记本电脑上很好地解决,但是Docker无法解决它们。
我没有网络专业知识来弄清楚这里发生了什么。有谁知道为什么在构建Docker容器时会发生这种奇怪的行为?
我能够找出问题所在。在Ubuntu上,Docker将容器的DNS服务器设置为8.8.8.x的Google服务器。据我了解,由于Ubuntu将/etc/resolv.conf设置为127.0.0.1,因此这是Ubuntu上的解决方法。
这些Google服务器无法从防火墙后面访问,这就是为什么我们无法解析任何URL的原因。
解决方法是告诉Docker使用哪个DNS服务器。此修复取决于您如何安装Docker:
如果您已安装Ubuntu软件包,请编辑/ etc / default / docker并添加以下行:
DOCKER_OPTS="--dns <your_dns_server_1> --dns <your_dns_server_2>"
您可以在此配置中添加任意数量的DNS服务器。编辑完此文件后,您将要重新启动Docker服务:
sudo service docker restart
如果您已经通过binaries方法安装了Docker(即没有软件包),那么在启动Docker守护程序时就设置了DNS服务器:
sudo docker -d -D --dns <your_dns_server_1> --dns <your_dns_server_2> &