Docker的默认网络是非常弱的,他使用的是一个虚拟网桥和container中的veth pair通信,在container中,默认是没有对外的IP的,外部主机或容器只能通过NAT,或者自定义iptable来实现主机或容器间的互联互通。 这种局限性非常明显:
理想的容器内网卡应该像VMware的NSX那样,让你’基本上’感觉不到这是个虚拟的网卡,当然,这个和Docker的初衷有点不符了。但我们解决问题为先,工具是那一个,但不同人用法不同。
将Docker Container连接到本地网络,有四种搞法 (具体请参考:http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/),下面简单描述下:
1 2 3 | ip addr add 10.12.0.117/21 dev em1 docker run -d --name web -p 10.12.0.117:80:80 centos/simpleweb |
---|
这种方法简单,但也有上面所说的各种缺点
需要注意的是,如果想要tcpdump macvtap,需要linux kernel 3.14以上的支持,参见这里。
最后推荐为了简化macvlan的操作,我写的一个小工具:dockerfly
参考:
http://www.ibm.com/developerworks/cn/linux/1310_xiawc_networkdevice/index.html
http://www.ibm.com/developerworks/cn/linux/1312_xiawc_linuxvirtnet/index.html
https://blog.kghost.info/2013/03/27/linux-network-tun/
http://fbevmware.blogspot.com/2013/12/coupling-docker-and-open-vswitch.html
http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/
https://news.ycombinator.com/item?id=7950326