您的位置 首页 linux 运维

firewalld无法拦截docker映射端口

firewalld无法拦截docker映射端口

Linux系统firewalld无法拦截docker映射端口_linux 防火墙 firewalld 无法禁用 docker 端口映射-CSDN博客

考虑到docker容器在启动时会自动配置iptables规则以允许容器端口的访问。推测firewalld可能在启动时或规则重载时删除了docker自动添加的iptables规则。

原因说明如下:

firewalld在启动时或规则重载时,会清除iptables中的部分或全部规则,这会影响到docker容器通过iptables映射的端口。docker在默认情况下会使用iptables来管理容器的网络流量,包括端口映射。因此,当firewalld与docker同时运行时,如果firewalld的配置或启动顺序不当,可能会导致docker容器的端口映射失效。

背景

今天出现了一个奇怪的现象,centos服务器上的防火墙(firewall)没有开放8103端口,但是依然可以访问

服务器开放的端口如下:

可以看出并没有开放8103端口

 

失败的原因,如下:

docker run -p 启动的时候会往iptables里面添加规则,firewall底层是基于iptables的,所以-p参数启动等于在防火墙上打了个洞

因为我是在docker的宿主机上控制端口访问,所以简单粗暴直接让docker不使用iptables,操作如下:

vi /usr/lib/systemd/system/docker.service

在文件中添加 --iptables=false

 


systemctl daemon-reload
systemctl restart docker

systemctl restart firewalld

最好重启一下 firewalld

 

注意:完成上述步骤以及可以采用系统 firewall 控制端口访问,但会出现 docker 容器间无法访问,而且容器内也无法访问外部网络。

使用类似 NAT 网络方式使得 docker 可以访问外部网络

 

firewall-cmd --permanent --zone=public --add-masquerade

谈谈使用该方法解决 docker 无视系统防火墙问题所带来的缺点:容器内无法获取得到客户端的真实 IP,由于是类似 NAT 网络,常常 nginx 日志上记录的是 docker0 网络的子网 IP,对于一些业务无法获取真实 IP 可能不能容忍,看个人的取舍吧。

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章