【玩转Docker系列6】Docker网络基础配置
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_2上ping主机VM2,抓包解析查看应答包有哪些内容不一样,发现除了MAC和IP外,无差异,排除了包差异导致丢包问题
当前已无其它招可用,在vSwitch上查看配置参数,将混杂模式打开,问题解决。
- 点赞
- 收藏
- 关注作者
评论(0)