如何将Dockernetworking接口关联到Linux主机上的Linuxnetworking接口(eth5)?

我的Linux主机有8个以太网接口,eth0 – eth7。 我在这台Linux主机上运行了三个Docker 1.9容器。
如何将一个Docker容器中的networking接口与第3层(IP层)上主机上特定的Linux物理networking接口(如eth5)相关联?

在第三层连接的原因是:
1.能够使用DHCPconfigurationDockernetworking接口

2.对于主机物理接口(eth5)上的所有传入IPstream量被转发到相关的Docker接口(我不想使用NAT进行端口映射,这将只将stream量导向特定的TCP / UDP端口Docker接口)

基本上,如何在第3层/第2层将Dockernetworking接口连接到特定的Linux(主机)networking设备(如eth5)?

有多种方法可以做到这一点:

  1. 使用Linux网桥(brctl)

  2. 使用Open vSwitch(ovs-vsctl)

  3. 使用MACVLAN

  4. 使用IPVLAN(在3.19内核中引入,但在4.2或更高版本之前不稳定)

Linux内核模块都支持MACVLAN和IPVLAN

MACVLAN:这使得可以创build“紧贴”物理networking接口的虚拟networking接口(上述问题中的eth5 )。 每个虚拟接口都有自己的MAC地址 – 与物理接口的MAC地址不同。 发往或来自虚拟接口的帧被映射到物理接口。

在Linux下,一个接口可以有多个地址,MACVLAN允许进一步隔离在这样的接口上可以看到的stream量。 MACVLAN将只能看到具有与该接口相匹配的MAC地址的stream量,从而阻止其他接口上的进程/容器监听去往另一个MACVLAN的stream量。

IPVLAN:与macvlan驱动程序在概念上非常相似,主要的一个例外是使用L3在从站之间进行复用/解复用。 主设备与其从设备共享L2 MAC。 这允许从主接口创build虚拟设备,并且根据数据包上的目标L3 IP地址来传送数据包。 所有接口(包括主接口)共享L2,使其对连接的L2交换机是透明的。

对于IPVLAN,规范文档是: https : //github.com/torvalds/linux/blob/master/Documentation/networking/ipvlan.txt

目前Docker在实验版本中支持MACVLAN和IPVLAN; 他们很快就会进入GA

有关MACVLAN和IPVLAN(包括特定命令)的更多信息,请参阅Brent Salisbury的优秀博客: http : //networkstatic.net/configuring-macvlan-ipvlan-linux-networking/