【问题标题】:How to configure docker default bridge work with unusual network configuration?如何使用不寻常的网络配置配置 docker 默认网桥?
【发布时间】:2015-02-15 06:05:30
【问题描述】:

基本上,在工作中我有一个 dhcp 地址分配为:

eth0      Link encap:Ethernet  HWaddr 5c:26:0a:5a:b8:48  
          inet addr:10.10.10.193  Bcast:10.10.10.255  Mask:255.255.255.0
          inet6 addr: <addr here>/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3591236 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2057576 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3449424352 (3.4 GB)  TX bytes:384131635 (384.1 MB)
          Interrupt:20 Memory:e2e00000-e2e20000 

有了这个,我的主机就可以很好地连接到互联网了。但是我的 docker 机器都不能在工作时连接到互联网。它们的配置如下所示:

docker0   Link encap:Ethernet  HWaddr 56:84:7a:fe:97:99  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::5484:7aff:fefe:9799/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:117799 errors:0 dropped:0 overruns:0 frame:0
          TX packets:170586 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:4858816 (4.8 MB)  TX bytes:122237788 (122.2 MB)

当我在家坐在传统的 192.168 路由器交换机下时,一切正常。

所以,我在想,如果我以某种方式让 docker0 接口位于 eth0 后面,那么无论在家还是在工作中,一切都会正常工作。但我不熟悉配置linux接口。我发现一篇文章谈到了almost the exact same problem,但是按照这些命令更改将接口br0添加到10.10.10.200/24会出现以下症状:

  1. 我的主机不再能够解析域名。移除接口 br0 让它立即再次工作
  2. dockerized 应用程序现在可以 ping 4.2.2.1,但不能 ping 8.8.8.8 或 8.8.4.4 或解析域名。在 /etc/default/docker.io 中添加 --dns 4.2.2.1 tp DOCKER_OPTS 并不能解决问题。
  3. 移除 br0 接口后,docker 化的应用程序无法再 ping 4.2.2.1 或 8.8.8.8 或 8.8.4.4

我没有更改 iptables;它使用基本 ubuntu 14.04 主机的默认 docker 配置更改。

如何最好地配置接口,以便 docker 允许 docker 化的应用程序在家中和工作时连接到互联网?

【问题讨论】:

    标签: linux networking docker


    【解决方案1】:

    关于网络和桥接的很多细节可以在以下位置找到:

    由于我有一个使用 Ubuntu 14.04 的虚拟机,我不确定这是否会重现该解决方案。但是,我的办公室也有同样的情况,一些 VPN 服务器提供与 Docker 默认在 docker0 网桥上使用的完全相同的默认网络 IP。能够在办公室使用 Docker 而在 VPN 后无法使用 docker 的行为真的很令人沮丧。

    所以,我使用了与您使用http://jpetazzo.github.io/2013/10/16/configure-docker-bridge-network/ 的链接中描述的相同的策略,但在 RHEL 6.5 服务器上。但是,我确实尝试了许多不同的选项来使其正常工作:

    1. 使用了不同的 IP 范围
    2. 使用了不同的掩码
    3. 先尝试手动设置,然后自动化永久解决方案。

    我在 RHEL 6.5 上的解决方案如下:

    [root@pppdc9prd6dq newww]# cat /etc/sysconfig/network-scripts/ifcfg-bridge0
    TYPE=Bridge
    DEVICE=bridge0
    NETMASK=255.255.252.0
    IPADDR=192.168.5.1
    ONBOOT=yes
    BOOTPROTO=none
    NM_CONTROLLED=no
    DELAY=0
    

    手动添加网桥

    以下是手动创建网桥的步骤:

    1.停止 Docker

    $ sudo service docker stop
    

    2。创建桥梁

    $ ip link add bridge0 type bridge
    $ ip addr add 192.168.5.1/20 dev bridge0
    $ ip link set bridge0 up
    

    3.更新 Docker 守护进程以使用网桥

    $ vim /etc/docker/daemon.json
    $ { "bridge": "bridge0"}
    

    4.重启 Docker

    sudo service start docker
    

    如果一切正常,只需永久添加修复程序

    持久

    1.与手册相同

    2。更新以下文件

    $ vim /etc/network/interfaces
    auto bridge0
    iface bridge0 inet static
        address 192.168.5.1
        netmask 255.255.252.0
        bridge_ports dummy0
        bridge_stp off
        bridge_fd 0
    

    3.与手册相同

    4.与手册相同

    并确保服务器上安装了bridge-utils,否则桥接接口不会出现。

    也许这会起作用?无论如何,在这里尝试任何事情,我们可以讨论和更改此解决方案。我相信当他们开始在 VPN 内部使用 Docker 时,会有更多的人遇到这个问题。

    【讨论】:

    • 所以这是一般的路线,我会遵循与此非常相似的方向。也就是说,但是,问题指向两件事——我想要一些解决方案,既可以在家(192.168 种地址)工作,也可以在工作中(10.10.10.193 地址)工作。这在家里可以正常工作,但在工作中不行。问题是 docker 自带的配置无法在工作中使用——在家里也可以正常使用。
    • 除了网桥之外,您是否尝试使用与主机连接到 VPN 时相同的 DNS 条目?这里的一个重要因素可能是您的网络正在将数据包丢弃到 Google 的 DNS ???看看我在stackoverflow.com/questions/25130536/…的回答,我也无法访问互联网,但问题与主机有关。
    • 是的,原来是 DNS 问题。我不知道 DNS 服务器在我们的 vlan 上的什么位置,因为我不是配置它的人。直到昨天我才得到帮助。
    • 很高兴知道...!有时这绝对是棘手的!你能评论你自己的问题,问题是什么,你做了什么来解决它?那绝对可以帮助别人!!!
    • @MarcellodeSales 在寻找解决方案两天后,这个答案终于解决了我的问题。哇!只是想在这里表示感谢..
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 2017-09-30
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2016-02-09
    • 2019-02-25
    相关资源
    最近更新 更多