关于docker 绕过防火墙开放端口的问题

一般来说安装完docker之后,它就会在iptables里创建几个chain,它需要通过iptables来实现自身的网络功能。
比如你启动容器时候使用指定 -p 8080:8080参数,就会发现它往IPTABLES里写了一些东西

iptables -L DOCKER  

iptables --list

命令可以查看,   

不过这个规则透过firewalld是看不到的,较新版本的redhat中加入FIREWALLD主要是为了引入区域概念、简化操作和易于理解,说白了就是用于解放iptables冗长的命令。
可他却是透过IPTABLES来完成自身功能的,本质上FIREWALLD是建立在IPTABLES之上的一个应用。
结论:docker并不是绕过了防火墙,只是应为它往iptables里写了规则,你在firewalld里看不到而已。
docker这个“接管”iptables的问题引起了很多用户的反对
————————————————
版权声明:本文为CSDN博主「aganliang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aganliang/article/details/105129808

原来我已用docker安装了jumpserver,并映射出端口,外网能正常访问jumpserver。后来某一天发现外网访问不了jumpserver,也无法用telnet连接jumpserver的相应IP及端口。但在docker的宿主机内,可以用telnet正常连接jumpserver的端口。所以觉得可能是防火墙的原因,firewall-cmd --list-all-zone查看防火墙,没发现开放jumpserver的相应端口,于是我添加放行相应端口。但还是无法访问jumpserver。于是我关闭防火墙,终于可以正常访问jumpserver,断定确实是防火墙原因。但是我明明添加放行相应端口了还是无法访问呢?几经折腾,找到诸如以上文章,但以上文章说的是docker中的运行的容器在映射相应端口后,不用另外在宿主机的防火墙添加放行相应端口。于是我重启宿主机,在firewalld运行的情况下,发现又可以正常访问jumpserver了。所以结论是:docker启动jumpserver容器,并映射所需端口的时候,会自动给firewalld的底层iptables添加规则,放行所有对docker容器的访问,但某个时候(我也不知道原因)失效了,即使重启firewalld还是无效,只有重启宿主机才有效,如果技术到家,应该可以不用重启宿主机。下次在遇到的话,就得深入iptables,比如先用上文中的命令:

iptables -L DOCKER  

iptables --list

然后……再然后……还是先深入firewalld和iptables吧

 


 


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值