Linux系统firewalld无法拦截docker映射端口

【问题描述】

在服务器上设置了防火墙规则,旨在限制只有特定的两个IP地址能够访问2181、6379、9200端口。但在测试时发现:

2181端口(直接监听在宿主机上)被拒绝访问,符合预期。

9200和6379端口(docker容器映射的端口)可以正常访问,与预期不符。

 

【问题分析】

排查思路如下:

1、检查firewalld的状态,发现存在警告信息。

 

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

原因说明如下:

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

【问题解决方法】

通过修改docker服务配置,禁用docker对iptables的自动管理解决。详细步骤操作如下:

vim /etc/systemd/system/docker.service

在在[Service]部分下,找到ExecStart=行,并在其后面添加--iptables=false参数。

 

systemctl daemon-reload

systemctl restart docker

猜你喜欢

转载自blog.csdn.net/qq_27815483/article/details/142632144