【玩转Docker系列6】Docker网络基础配置

举报
fengfeng 发表于 2017/03/08 01:13:10 2017/03/08
【摘要】 当Docker启动时,默认会自动在主机上创建一个docker0虚拟网桥,实际上是Linux的一个bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。

Docker网络基础配置

1.1    容器与外部网络通信(端口映射)

1.1.1     宿主机网络

Docker启动时,默认会自动在主机上创建一个docker0虚拟网桥,实际上是Linux的一个bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。同时,Docker 随机分配一个本地未占用的私有网段(在RFC1918中定义)中的一个地址给docker0接口。比如典型的172.17.42.1,掩码为255.255.0.0

UbuntuTest:~ # ip a

2: eth0:   <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group   default qlen 1000

    link/ether 00:50:56:84:a4:3c   brd ff:ff:ff:ff:ff:ff

    inet 10.71.96.200/24 brd   10.71.96.255 scope global eth0

       valid_lft   forever preferred_lft forever

3: docker0:   <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group   default

    link/ether 02:42:fc:ea:e5:44   brd ff:ff:ff:ff:ff:ff

    inet 172.17.42.1/16   scope global docker0

       valid_lft   forever preferred_lft forever

104: veth61467bc:   <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0   state UP group default

    link/ether 1e:0f:b9:8f:02:e4   brd ff:ff:ff:ff:ff:ff

124: veth481b862:   <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0   state UP group default

    link/ether 26:4e:b5:5c:02:9e   brd ff:ff:ff:ff:ff:ff

 1.1.2     容器网络

启动的容器内的网口会自动分配和主机同网段(172.17.0.0/16)的一个地址。

UbuntuTest:~ # docker run -it redhat7   /bin/bash

bash-4.2# ifconfig

eth0:   flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.17.0.3    netmask 255.255.0.0  broadcast 0.0.0.0

 

bash-4.2# route

Kernel IP routing table

Destination       Gateway         Genmask           Flags Metric Ref    Use Iface

default           172.17.42.1       0.0.0.0         UG      0      0        0   eth0

172.17.0.0        0.0.0.0           255.255.0.0     U       0      0        0   eth0

 其主机和容器的网络见下图。


 Container_2         ping       Container_1                OK

Container_2         ping       VM1                            OK

Container_2         ping       VM2                            Fail

问题分析思路:

1  VM1是否设置了特殊的iptable规则,检查发现没有;

2  arp请求包是否到达VM2,在VM2上抓包可看到arp请求包;

3  arp应答包是否到达VM1,在VM1网桥上抓包没有,eth0上抓包没有,那么唯一的解释就是vSwitch丢弃了应答包;

4 vSwitch为什么会丢弃,同时在VM1上和Container_2ping主机VM2,抓包解析查看应答包有哪些内容不一样,发现除了MACIP外,无差异,排除了包差异导致丢包问题

当前已无其它招可用,在vSwitch上查看配置参数,将混杂模式打开,问题解决。

作者 | 胡国胜

转载请注明出处:华为云博客 https://portal.hwclouds.com/blogs

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。