一尘不染

在企业网络上构建映像期间网络调用失败

docker

我在公司网络上构建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容器时会发生这种奇怪的行为?


阅读 239

收藏
2020-06-17

共1个答案

一尘不染

我能够找出问题所在。在Ubuntu上,Docker将容器的DNS服务器设置为8.8.8.x的Google服务器。据我了解,由于Ubuntu将/etc/resolv.conf设置为127.0.0.1,因此这是Ubuntu上的解决方法。

这些Google服务器无法从防火墙后面访问,这就是为什么我们无法解析任何URL的原因。

解决方法是告诉Docker使用哪个DNS服务器。此修复取决于您如何安装Docker:

Ubuntu软件包

如果您已安装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> &
2020-06-17