当前位置: 首页 > 面试题库 >

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

华景明
2023-03-14
问题内容

我在公司网络上构建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软件包

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


 类似资料:
  • 我在我的公司网络上建立Docker图像时遇到了问题。我刚刚开始使用Docker,所以我有以下用于hello-world类型应用程序的Dockerfile: 当我在家里的笔记本电脑上,在我自己的无线网络上构建它时,这很好用。它拉下必要的依赖关系,并正确地构建映像。 我没有网络技术来弄清楚这里发生了什么。有人知道为什么在构建Docker容器时会出现这种奇怪的行为吗?

  • 创建网络 Mininet 的操作十分简单,启动一个小型测试网络只需要下面几个步骤。 登录到虚拟机命令行界面,打开 wireshark,使其后台运行, 命令为 sudo wireshark &。 启动 Mininet,命令为sudo mn,则默认创建如下图所示的网络拓扑。 经过短暂的等待即可进入以 mininet> 引导的命令行界面。 好了,从现在开始,我们就拥有了一个 1 台控制节点(contro

  • Hyperledger Composer支持三种类型的测试:交互式测试、自动化单元测试和自动系统测试。三者都有不同的用途,对于确保区块链项目的成功至关重要。 在部署了业务网络定义之后,通常运行一个互动的“冒烟测试”以确保部署成功。为了运行这样的冒烟测试,composerCLI暴露了几个命令。 另一方面,你可以使用Docker Compose和Mocha/Chai编写完整的系统测试,这些测试启动运行

  • 在部署业务网络定义之前,必须将其打包到业务网络档案(.bna)文件中。composer archive create命令用于从磁盘上的业务网络定义文件夹创建业务网络档案文件。 一旦创建了业务网络档案文件,就可以使用composer runtime install命令和composer network start命令将其部署到运行时。 例如: composer runtime install -n

  • 业务网络定义是Hyperledger Composer编程模型的一个关键概念。它们由在composer-common模块中定义类BusinessNetworkDefinition表示,并由composer-admin和composer-client导出。 业务网络定义由以下部分组成: 一组模型文件 一组JavaScript文件 一个访问控制文件 模型文件定义了业务网络的业务领域,而JavaScri

  • 开发商使用Hyperledger Composer来数字化业务网络。业务网络由网络中的多个参与者访问,其中一些参与者可能负责维护(托管)网络本身,称为网络维护者。 通常,网络的每个维护者会运行几个peer节点(用于崩溃容错),并且Hyperledger Fabric跨peer节点复制分布式账本。 模型 开发人员与业务分析师合作,为业务网络定义领域数据模型。数据模型使用Composer建模语言进行表