docker bridge connection破坏了互联网

时间:2018-06-06 22:18:30

标签: ubuntu docker ubuntu-16.04

我通过虚拟盒获得了Ubuntu 16.04映像。开箱即用,它通过虚拟机的NAT选项通过主机操作系统获得互联网 问题是当我安装docker-ce(版本18.03.1)时,它会安装一个可以连接互联网的brigde连接

nmcli设备状态显示:

    docker0 brigde      connected   docker0
    enp0s3  ethernet    connected   Wired connection 1
    lo      loopback    unmanaged   --

我意识到enp0s3和docker0在不同的子网中

ifconfig显示:

    docker0   Link encap:Ethernet  HWaddr 02:42:40:2a:c5:ac  
              inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0

    enp0s3    Link encap:Ethernet  HWaddr 08:00:27:57:af:e4  
              inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0

route -n命令显示:

    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         10.0.2.2        0.0.0.0         UG    100    0        0 enp0s3
    10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
    169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s3
    172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0

docker network ls命令显示:

    NETWORK ID          NAME                DRIVER              SCOPE
    357f65a4b16e        bridge              bridge              local
    8ba7ce283fd1        host                host                local
    0aa5fcaafe8b        none                null                local

我怎样才能在ubuntu上使用docker和internet工作?我想我需要在docker0更改一些配置,但网络不是我的专长。 提前致谢

3 个答案:

答案 0 :(得分:0)

我今天正在与同样的问题作斗争,升级到Docker 18.05解决了这个问题。 在Fedora中我做到了这样:

dnf update docker-ce --enablerepo=docker-ce-test

它安装了docker-ce-18.05.0.ce-3.fc27.x86_64问题所在。

在Ubuntu中,您可以通过以下命令进行更新:

apt-get install docker-ce=18.05.0~ce~3-0~ubuntu

如果您没有添加Docker测试存储库,请先添加它:

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) test"

答案 1 :(得分:0)

Add the name server, 8.8.8.8, to the DNS resolver,方法是编辑 /etc/resolvconf/resolv.conf.d/head 并添加以下内容。这应该在重新启动后起作用。

nameserver 8.8.8.8

通过执行以下命令来更新DNS解析配置文件 /etc/resolv.conf

sudo resolvconf -u

GitHub上有很多与此有关的问题。

https://github.com/moby/moby/issues/36153

https://github.com/docker/libnetwork/issues/2187

https://github.com/moby/moby/issues/32270

https://github.com/docker/for-mac/issues/1601

答案 2 :(得分:0)

对我来说,docker 搞乱了现有的路由规则。例如。需要连接到 172.20.blah(通常采用默认路由,并且某些东西最终知道将流量发送到哪里),但 docker 使用自己的路由规则劫持了它。它通常存在恰好使用相同地址范围的 LAN 和 VPN 网络。基本上,在盲目地破坏它之前,它不会费心检查子网是否正在使用 - 我实际上不确定这是否可行,因为默认范围涵盖了所有内容。除了咆哮,这有效:

  1. 清理它留下的路线(最终这就是问题所在)

    route -n 看看它为什么坏了。然后……

    sudo route del -net 172.19.0.0 netmask 255.255.0.0 dev br-5094d9589bea
    sudo route del -net 172.20.0.0 netmask 255.255.0.0 dev br-964b736ea39c
    
  2. 告诉它改用哪个子网:

另见: