我有一个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。
默认--net=bridge
模式似乎不支持此功能。我能得到的最接近的是,任何ContainerA地址的传入流量都被正确转发到容器,但传出流量始终来自同一个地址。
使用--net=host
时,第一个容器将附加到所有可用的IP地址,因此第二个容器将无法打开其IP范围内的套接字。
--ip
命令的docker run
选项似乎接近我需要的内容,如this blog post中所述。不幸的是,它似乎不支持每个容器的多个静态IP。
如果更方便,使用CIDR子网而不是IP范围就可以了。
如何配置Docker来实现这一目标?
答案 0 :(得分:0)
我认为您可以通过customizing docker0 bridge来完成,甚至可以创建您的own network bridge
答案 1 :(得分:0)
每个docker容器只有一个IP。我们也可以通过将桥接网络设置为
来设置自定义IPdocker 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容器。