我有一个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
mode似乎不支持这一点。我能得到的最接近的是,任何ContainerA地址的传入流量都被正确地转发到容器,但是传出流量始终来自同一个地址。
使用--net=host
时,第一个容器将附加到所有可用的IP地址,因此第二个容器将无法打开其IP范围内的套接字。
--ip
命令的docker run
选项似乎接近我所需要的,正如this blog post所解释的那样。不幸的是,它似乎不支持每个容器的多个静态IP。
如果更方便,使用CIDR子网而不是IP范围就可以了。
我如何配置Docker来实现这一目标?
我认为你可以通过customizing docker0 bridge做到,甚至创建你的own network bridge