如何使用异常网络配置配置docker默认网桥工作?

时间:2014-12-16 20:02:22

标签: linux networking docker

基本上,在工作中我将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 

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

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 apps现在可以ping 4.2.2.1,但不能ping 8.8.8.8或8.8.4.4或解析域名。添加--dns 4.2.2.1 tt /etc/default/docker.io中的DOCKER_OPTS无法解决问题。
  3. 删除br0界面后,dockerized应用程序不再能ping 4.2.2.1或8.8.8.8或8.8.4.4
  4. 我没有改变iptables;它使用基本ubuntu 14.04主机的默认docker配置更改。

    如何最好地配置接口,以便docker允许dockerized应用程序在家中和工作中连接到Internet?

1 个答案:

答案 0 :(得分:5)

有关网络和网桥的大量详细信息,请访问:

由于我有一个使用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. 首先尝试手动设置,然后自动执行永久性解决方案。
  4. 我在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时,会有更多人遇到此问题。