这几天使用docker在架服务器。由于业务的需要,两台服务器需要互相通讯,暴露相同的端 口在外面。通过docker默认的网卡没办法解决了。。。
直接说最后的解决方案吧,我是在ubuntu(14.04)环境下的。
在/etc/network/interfaces中添加一个br的接口。我添加的是br3
auto br3 iface br3 inet static address 172.10.1.121 netmask 255.255.255.0 gateway 172.10.1.1 bridge_ports eth0 bridge_stp off bridge_fd 0 dns-nameservers 172.10.1.1
这里需要注意的是,我将br3的网卡分配的静态的地址是原来的eth0(物理网卡)的网卡地址,也可以分 配不同的IP,分配不同的IP相当于双网卡了。之所以不使用br0是因为我发现如果用br0的话, 容易和virtualbox冲突,然后,电脑就华丽的彻底死机了,当然,也可能是个别现象
执行以下的代码(root权限),不执行这一步可以分配到IP,但无法互相通讯。
ip addr add 172.10.1.121/24 dev br3; ip addr del 172.10.1.121/24 dev eth0; brctl addif br3 eth0; ip route del default; ip route add default gw 172.10.1.1 dev br3
最好重启下电脑(反正我是电脑死机只能重启了)。
然后,需要使用pipework了,直接git clone 下来,使用下面的方式可以分配一个新的物理 网段的IP给容器。
pipework br3 容器名称或ID 172.10.1.123/24@172.10.1.1
这会使容器中新增加一块网卡,网卡的IP就是指定的IP地址(上面的172.10.1.123)。这个时 候,通过这个IP,容器就像一台真实的物理主机这样工作了。而相关的开放给Host的端口映 射也完全正常工作。
这种模式相比于使用lxc的网卡而言,就是docker的命令完全不受影响,如果使用-b lxc的 方式的话,在执行docker exec的时候,会出现lxc不支持。