为什么这么做
当一个容器只暴露少量端口可以使用-p,当容器需要暴露大量端口时,这种方式显然不合适,而且浪费系统资源。
另一种方式可以给容器使用宿主机网络空间,但是这样从安全性来说,就不太适合了。
#CIP为xswitch容器IP地址,把宿主机10000:10099 rtp端口段,映射到xswitch容器的10000-10099
#把宿主机17060 udp端口映射到容器的17060端口,方便注册
CIP=192.168.10.3
iptables -A DOCKER -t nat -p udp -m udp ! -i docker0 --dport 10000:10099 -j DNAT --to-destination $CIP:10000-10099
iptables -A DOCKER -p udp -m udp -d $CIP/32 ! -i docker0 -o docker0 --dport 10000:10099 -j ACCEPT
iptables -t nat -A POSTROUTING -p udp -s $CIP/32 -d $CIP/32 --dport 10000:10099 -j SNAT --to-source 10.150.45.10
#iptables -A POSTROUTING -t nat -p udp -m udp -s $CIP/32 -d $CIP/32 --dport 10000:10099 -j MASQUERADE
iptables -A DOCKER -t nat -p udp -m udp ! -i docker0 --dport 17060 -j DNAT --to-destination $CIP:17060
iptables -A DOCKER -p udp -m udp -d $CIP/32 ! -i docker0 -o docker0 --dport 17060 -j ACCEPT
iptables -t nat -A POSTROUTING -p udp -s $CIP/32 -d $CIP/32 --dport 17060 -j SNAT --to-source 10.150.45.10
#把CIP改为nginx容器地址,访问宿主机8000端口会转到容器80端口
CIP=192.168.10.4
iptables -A DOCKER -t nat -p tcp -m tcp ! -i docker0 --dport 8000 -j DNAT --to-destination $CIP:80
iptables -A DOCKER -p tcp -m tcp -d $CIP/32 ! -i docker0 -o docker0 --dport 8000 -j ACCEPT
iptables -t nat -A POSTROUTING -p tcp -s $CIP/32 -d $CIP/32 --dport 8000 -j SNAT --to-source 10.150.45.10