全部博文(252)
分类: 云计算
2015-10-13 21:41:08
使用下面的命令启动一个交互的container后,使用netstat –r可以看到其中的路由信息。
[root@centos~]# docker run -i -t centos6.3-base-v2 /bin/bash
下面的命令显示了在该Container中的路由信息。
[root@8e6146d088ce /]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 172.17.42.1 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 * 255.255.0.0 U 0 0 0 eth0
其中172.17.42.1为宿主机上网桥docker0接口的IP地址。
[root@10-10-63-106 ~]# ifconfig
docker0: flags=4163
inet 172.17.42.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::5484:7aff:fefe:9799 prefixlen 64 scopeid 0x20
ether 56:84:7a:fe:97:99 txqueuelen 0 (Ethernet)
RX packets 22 bytes 1324 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9 bytes 664 (664.0 B)
TX errors 0 dropped 0 overruns
0 carrier 0 collisions 0
每启动一个Container都会在宿主机上生成一个veth类型的网卡接口,vethXXX接口就是宿主机和Container进行通信的接口,Veth接口会加入到docker0的虚拟网桥中。Veth类型的网卡接口是成对出现的,在宿主机上有一个veth接口在container内有一个和其对应的veth接口,当Container通过内部的Veth接口发送数据时,在宿主机上的veth接口就可以接受到,同样当宿主机上的数据发送到Veth接口,在Container中Veth接口也可以接收到。向其一端输入数据,VETH会改变数据的方向并将其送入内核网络核心,完成数据的接收。在另一端能读到此数据。
在一台宿主机上分别启动了两个Container,可以看到它们的IP地址。
Container 1:
bash-4.1# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04
inet addr:172.17.0.4 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:4/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:11 errors:0 dropped:0 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:851 (851.0 b) TX bytes:816 (816.0 b)
Container 2:
[root@8e6146d088ce /]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:03
inet addr:172.17.0.3 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:20 errors:0 dropped:0 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1541 (1.5 KiB) TX bytes:816 (816.0 b)
我们直接在Container2上ping Container1上的IP地址是可以直接ping通。
使用这种bridge模式,本身不需要任何的配置,在同一个宿主机上的启动的容器可以直接进行通信。在宿主机上使用brctl show命令就可以看出桥docker0下的接口信息
[root@10-10-63-106 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.56847afe9799 no veth7cfb930
veth99674fb