docker分配容器物理地址

这几天使用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不支持。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据