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

 -独享你的温情 发布于 2023-01-10 03:31

我在公司网络上构建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卷曲中运行:(5)无法'解析代理'some.proxy.address'错误:跳过http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm - 转移失败

在我的公司网络上,我可以通过笔记本电脑轻松访问该URL.但是一旦Docker尝试构建容器,突然间它根本无法解决.对于各种外部资源(apt-get等),这种行为是相同的:它们都可以在公司网络上的笔记本电脑上解决得很好,但Docker无法解决它们.

我没有网络专业知识来弄清楚这里发生了什么.有谁知道为什么在构建Docker容器时会发生这种奇怪的行为?

5 个回答
  • 我弄清楚了这个问题.在Ubuntu上,Docker将容器的DNS服务器设置为8.8.8.x的Google服务器.据我了解,这是Ubuntu的一种解决方法,因为Ubuntu将/etc/resolv.conf设置为127.0.0.1.

    我们的防火墙后面无法访问这些Google服务器,这就是我们无法解析任何网址的原因.

    解决方法是告诉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
    

    二进制

    如果你已经通过二进制方法安装了Docker(即没有包),那么在启动Docker守护进程时设置DNS服务器:

    sudo docker -d -D --dns <your_dns_server_1> --dns <your_dns_server_2> &
    

    2023-01-10 03:45 回答
  • 我建议更改Docker守护程序的DNS设置.您可以通过在/etc/docker/daemon.json中创建守护程序配置文件来设置docker守护程序的默认选项.根据您的主机设置DNS服务器,例如我的DNS服务器是10.0.0.2:

    {"dns": ["10.0.0.2", "8.8.8.8"] }
    

    然后你需要重新启动docker服务:

    sudo service docker restart
    

    此处提供了分步说明Fix Docker的网络DNS配置

    2023-01-10 03:50 回答
  • 对于使用SystemD(Ubuntu 16,RHEL 7 ...)的任何Linux发行版,将使用以下命令显示该路径:

    $ systemctl status docker
    ? docker.service - Docker Application Container Engine
       Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
       Active: active (running) since Wed 2016-06-29 08:10:33 PDT; 2min 34s ago
         Docs: https://docs.docker.com
     Main PID: 1169 (dockerd)
        Tasks: 19
       Memory: 85.0M
          CPU: 1.779s
       CGroup: /system.slice/docker.service
               ??1169 /usr/bin/dockerd --dns 172.18.20.11 --dns 172.20.100.15 --dns 8.8.8.8 --dns 8.8.4.4 -H fd://
               ??1232 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --met
    

    路径是/lib/systemd/system/docker.service.在启动守护程序的行中添加DOCKER_OPTS可以包含任何值的值--dns.

    cat /lib/systemd/system/docker.service | grep dns 
    ExecStart=/usr/bin/dockerd --dns 172.18.20.11 --dns 172.20.100.15 --dns 8.8.8.8 --dns 8.8.4.4  -H fd://
    

    2023-01-10 04:01 回答
  • 以下步骤适用于我(对于docker build和docker run命令).我的linux版本是Ubuntu 14.04.

    使用以下命令识别DNS.

    nm-tool | grep DNS

    这个结果在我的情况下DNS:192.168.1.1

    在/etc/default/docker.io中创建条目.我目前的条目是这样的

    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --dns 192.168.1.1"

    重启docker服务

     sudo service docker.io restart 

    2023-01-10 04:10 回答
  • 在Mac和Windows上的Docker(至少> = 1.13,可能更早),您可以在首选项->守护程序->高级中配置DNS:

    以下配置设置了两个公司DNS服务器(在此使用您自己的值),并回退到Google公共DNS服务器。

    2023-01-10 04:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有