您好,欢迎访问沃航(武汉)科技有限公司官方网站
docker中添加新的端口以及添加多端口映射
2017-08-13 05:00:00

最近由于喜欢上了docker技术,小沃所有的服务器开始全部采用docker技术实现了。但是不知道是否有与小沃一样的运维小伙伴,有需要在docker容器中安装ftp server的需求。如果有,您这边应该遇到了与小沃一样的问题,那就是docker的端口映射如果映射的是范围,会在创建时创建一个docker-proxy的进程,如果您这边批量映射超过10000个端口,那么您的服务器就会产生10000个这个进程,这是非常占用系统资源的。

下面,小沃就介绍一下如何解决这个问题。

方法就是,直接使用docker底层的转发技术,iptables进行转发。

当各位在一个运行了docker的环境中,并且这个环境有配置-p参数。您可以在宿主机上执行iptables-save,然后您就可以看到三段iptables的配置。武汉app开发

而iptables中,无论是路由转发的配置还是防火墙的配置,本身都是自带端口返回功能的。

因此,如果您需要给一个容器配置新的端口映射,您只需要添加端口的iptables即可。

但是务必要记住需要添加三段,根据不同宿主机的iptable反馈的值添加。


那么又有人问了,docker的ip是动态生成的,我们怎么知道这次生成的docker的动态ip是什么呢?

这个问提问的好,获取docker动态ip的方法是docker inspect --format='{{.NetworkSettings.IPAddress}}' dfbe74896b0b

红色字体为container的id,不同的container,id不同,请注意修改。


下面我们假设container的ip为192.168.0.2。

如果您仅仅是要添加一个端口映射,比如添加一个443端口,方法为。

iptables -t nat -A POSTROUTING -s 192.168.0.2/32 -d 192.168.0.2/32 -p tcp -m tcp --dport 443 -j MASQUERADE

iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 30000:40000 -j DNAT --to-destination 192.168.0.2:443

iptables -A DOCKER -d 192.168.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 443 -j ACCEPT

注意将IP换成您自己的容易的哦。


第二个例子,这个例子更加的实用,就是为了解决容器内部ftp使用被动模式,所产生的大量问题导致。

这里我们的例子是开放30000到40000这10000个端口。

iptables -t nat -A POSTROUTING -s 192.168.0.2/32 -d 192.168.0.2/32 -p tcp -m tcp --dport 30000:40000 -j MASQUERADE

iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 30000:40000 -j DNAT --to-destination 192.168.0.2:30000-40000

iptables -A DOCKER -d 192.168.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 30000:40000 -j ACCEPT


好了,这样就可以了,请注意,不同版本的docker,不同的操作系统可能不同的效果。

实际命令需要根据命令iptables-save的返回值调整,切不可生搬硬套哦。

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn