通过特定的IP从Docker容器路由传出连接

我有一个docker主机,它具有一个物理networking接口(eth0)和多个使用IP别名(eth0:1,eth0:2,eth0:3)分配给它的IP地址。

我想运行几个docker集装箱,使他们每个人都使用自己的IP地址拨打互联网的电话。 当从集装箱连接到集装箱时,它们最好在相同的IP上也可达到。

如何设置docker和iptables使其工作? 然后用什么参数来运行每个容器?

eth0 – > 192.168.0.1

eth0:1 – > 192.168.0.2

eth0:2 – > 192.168.0.3

eth0:3 – > 192.168.0.4

docker运行 – 名称= web01 -p 192.168.0.1:80:80 ….

docker运行 – 名称= web02 -p 192.168.0.2:80:80 ….

docker运行 – 名称= web03 -p 192.168.0.3:80:80 ….

docker运行 – 名称= web04 -p 192.168.0.4:80:80 ….

他们将创buildDNAT规则:

链DOCKER(2引用)pkts字节目标protselect输出源目的地
0 0 DNAT tcp – !docker0 * 0.0.0.0/0 192.168.0.1 tcp dpt:80 – :172.17.0.1:80

pkts字节目标人选退出源目的地
0 0 DNAT tcp – !docker0 * 0.0.0.0/0 192.168.0.2 tcp dpt:80 – :172.17.0.2:80

交通产生的集装箱属于规则:

链POSTROUTING(策略ACCEPT 430M数据包,26G字节)pkts字节目标protselect输出目的地
0 0 MASQUERADE all – *!docker0 172.17.0.0/16 0.0.0.0/0

PS

在Linux中,我们可以使用很多没有别名的IP

ip aa 192.168.0.1/24 dev eth0

ip aa 192.168.0.2/24 dev eth0 ….