13397158231   jevian_ma@worldflying.cn

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的返回值调整,切不可生搬硬套哦。

优秀产品推荐:可编程网络IO控制器

上一篇:微信企业认证服务号发送模板消息

下一篇:微信公共平台判断某个用户使用有关注自己

联系我们

  • 地址:武汉市东湖高新开发区光谷总部国际1栋2412室
  • QQ:932773931
  • 电话:027-59761089-806
  • 手机:13397158231
  • 邮箱:jevian_ma@worldflying.cn

关注公众号

扫码添加微信

沃航(武汉)科技有限公司版权所有

备案号:鄂ICP备16014230号-1

本网站由提供CDN加速/云存储服务