CoreOS – 在特定的VLAN上启动Docker容器

这是关于如何在CoreOS上设置VLAN的问题的补充[ CoreOS裸机vlannetworking 。 我之后的问题是在你设置好之后,你如何使用它?

你如何启动一个容器,将该容器的以太网接口放入其中一个特定的VLAN中?

警告:下面的HACKS!

networking(今天)在Docker内部有些尴尬,所以我们需要弥补很多代表用户的假设。 为此,您需要为接口创build一个桥接接口,然后通过--lxc-conf选项以类似于此答案的方式传递configuration。

作为一个例子(注意,这可能不会直接被复制/粘贴,我从记忆中回想起来):
首先我们在VLAN800上的eth0上configuration一个子接口:

/etc/sysconfig/network/05-eth0.netdev

 [Match] Name=eth0.800 [Network] Address=192.168.20.25/24 Gateway=192.168.20.1 DNS=192.168.1.1 VLAN=800 

接下来,我们为需要访问该VLAN的其他设备创build一个桥接:

/etc/sysconfig/network/20-br800.netdev

 [NetDev] Name=br800 Kind=bridge 

然后我们将之前创build的子接口附加到桥上:

/etc/sysconfig/network/50-eth0-800.netdev

 [Match] Name=eth0.800 [Network] Bridge=br800 

现在我们处于一个状态,我们需要在主机上configurationnetworking,并且可以执行如下操作:

 docker run \ --net="none" \ --lxc-conf="lxc.network.type = veth" \ --lxc-conf="lxc.network.ipv4 = 192.168.20.30/24" \ --lxc-conf="lxc.network.ipv4.gateway = 192.168.20.1" \ --lxc-conf="lxc.network.link = br800" \ --lxc-conf="lxc.network.name = eth0" \ --lxc-conf="lxc.network.flags = up" \ -d [Docker Image ID] 

理想情况下,我们不必为了以这种方式进行networking设置而做太多黑客攻击,但是这会导致能够创build连接到不同VLAN的多个网桥,并将来自不同容器的stream量分开,并强制它通过某个上游路由器。