Docker容器的多个静态IP

时间:2017-06-22 15:22:56

标签: networking docker iptables

我有一个Docker主机,应该允许每个容器有多个静态IP地址。然后,容器内的应用程序应该能够选择将流量发送到远程主机的地址(例如ping -I <source-address> example.com)。

想象一下这样的设置:IP地址10.0.0.10 - 10.0.0.19分配给ContainerA,10.0.0.20 - 10.0.0.29分配给ContainerB,依此类推。 ContainerA的地址范围的任何流量都会转发到ContainerA,而传出的流量来自ContainerA可以选择的范围内的地址。这同样适用于ContainerB。

enter image description here

enter image description here

默认--net=bridge模式似乎不支持此功能。我能得到的最接近的是,任何ContainerA地址的传入流量都被正确转发到容器,但传出流量始终来自同一个地址。

使用--net=host时,第一个容器将附加到所有可用的IP地址,因此第二个容器将无法打开其IP范围内的套接字。

--ip命令的docker run选项似乎接近我需要的内容,如this blog post中所述。不幸的是,它似乎不支持每个容器的多个静态IP。

如果更方便,使用CIDR子网而不是IP范围就可以了。

如何配置Docker来实现这一目标?

2 个答案:

答案 0 :(得分:0)

我认为您可以通过customizing docker0 bridge来完成,甚至可以创建您的own network bridge

答案 1 :(得分:0)

每个docker容器只有一个IP。我们也可以通过将桥接网络设置为

来设置自定义IP

docker network create net1 --driver = bridge --subnet =“ 192.168.0.1/27”

如果您不提及驱动程序,则默认情况下为桥接网络。

因此,在这里使用--subnet,您可以为网络提供自定义IP地址,并使用该网络,还可以为该网络内部的容器提供自定义IP地址。

然后运行一个容器,

docker run -it --network = net1 --ip =“ 192.168.0.3” --name = MyContainer映像名称

现在,通过这种方式,您可以制作32-27 = 5个,即(2 ^ 5)-2个Docker容器。