介绍
介绍
福哥的Docker环境有一些服务是只能针对一些特定的IP地址开放的,而docker的端口映射要不就是针对全部网络设备放开,要不就是针对某一个网络设备放开,无法满足福哥的需要。
没有办法了,既然Docker无法解决福哥的问题,福哥只能自己iptables解决了~~
默认网络与自定义网络
网络列表
查看网络列表的方法如下:
docker network ls
默认网络
默认网络包含一堆的默认规则,这些规则支持了更多的功能。
docker-compose的默认网络就是配置文件所在目录的目录名称+default,目录名称全部取小写,例如:目录名称是Tongfunet,则默认网络名称就是tongfunet_default。
自定义网络
自定义网络比较清爽,没有默认网络的一堆的默认规则。当然支持的功能也没有默认网络的多,基本上都需要自己编写实现功能的规则。
福哥这里的自定义网络就是bridge2这个网络。
组合网络
如果容器包括默认网络和自定义网络的话,一定要以自定义网络为主进行端口映射。
端口映射
正常情况
默认网络映射端口需要设置如下三条规则,包括两条nat规则和一条主表规则。
iptables -A DOCKER -p tcp -m tcp ! -i bridge2 -o bridge2 -d 10.16.0.8 --dport 80 -j ACCEPT iptables -t nat -A DOCKER -p tcp -m tcp ! -i bridge2 --dport 80 -j DNAT --to-destination 10.16.0.8:80 iptables -t nat -A POSTROUTING -p tcp -s 10.16.0.8 -d 10.16.0.8 --dport 80 -j MASQUERADE
超长网络名称
如果自定义网络的名称长度超过15个字符,就不能直接用于iptables命令了。
需要获得网络的NETWORK ID,这个NETWORK ID可以在查看网络列表的时候看到。
然后用NETWORK ID拼凑一个网络名称,格式为:
br-[NETWORK ID]
端口映射还是三条规则,唯一的区别就是网络设备不一样。
iptables -A DOCKER -p tcp -m tcp ! -i br-7b57e1d23c71 -o br-7b57e1d23c71 -d 172.18.0.8 --dport 80 -j ACCEPT iptables -t nat -A DOCKER -p tcp -m tcp ! -i br-7b57e1d23c71 --dport 80 -j DNAT --to-destination 172.18.0.8:80 iptables -t nat -A POSTROUTING -p tcp -s 172.18.0.8 -d 172.18.0.8 --dport 80 -j MASQUERADE
注意:如果网络名称没有超过15个字符,一定不能用br-[NETWORK ID]作为网络设备名称!
总结
今天福哥带着大家学习了如何给Docker容器的端口映射出来的方法,通过这种技术可以随心所欲的将Docker容器里面的端口开放给我们想要开放的IP地址。