一次firewalld和docker冲突问题排查

过程记录

某次部署完服务,我当时调试的时候好好的,后面用户反应服务挂了。我上去看发现是所有的中间件和服务之间都无法相互访问(服务都部署在docker里了)。仔细检查发现是网络不通,关掉防火墙以后服务就通了。即使我在firewalld中放行了对应的端口也没用。

各种搜索+问AI以后,提示有可能跟docker的bridge网络和iptables有关,于是确认了一下现状,内核好像没有加载一个叫做br_netfilter​的模块,内核参数net.bridge.bridge-nf-call-iptables​也没有开启,把这两个问题解决以后,网络就通了。

ini 复制代码
# 操作系统信息
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Halberd)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Halberd)"
ANSI_COLOR="0;31"

# 硬件信息
Linux localhost.localdomain 4.19.90-89.26.v2401.ky10.x86_64 #1 SMP Tue Sep 23 16:08:37 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

现状确认

perl 复制代码
# 确认br_netfilter模块是否已经开启
lsmod | grep br_netfilter
# 没有任何输出= =!

# 确认bridge网络是否开启啦iptables
sysctl -p
# 没有net.bridge.bridge-nf-call-iptables = 1 这行信息的输出

解决步骤

bash 复制代码
# 1. 确保firewalld放行public区域的3306
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload

# 2. 修复Docker与firewalld冲突(关键步骤!)
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
sysctl -p

# 解决报错:sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: 没有那个文件或目录

# 临时加载模块
modprobe br_netfilter
# 永久生效(重启后不丢失)
echo "br_netfilter" > /etc/modules-load.d/br_netfilter.conf
# 添加必需的 sysctl 参数
cat > /etc/sysctl.d/99-docker-bridge.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-arptables = 1
EOF

# 重新加载所有参数
sysctl -p /etc/sysctl.d/99-docker-bridge.conf

# 验证iptables是否正常开启
sysctl net.bridge.bridge-nf-call-iptables
# 应返回:net.bridge.bridge-nf-call-iptables = 1

# 重启docker服务
systemctl restart docker

# 最后重新telnet服务就通了

总结

这次的问题主要是br_netfilter​这玩意没有开,导致Docker bridge 网络运行在防火墙之外(所以我在防火墙的配置完全影响不到docker的服务,网络该断的还是断了)。Docker和Linux的网络通信过程有点复杂,以后有时间有兴趣再研究吧~

PS:某麒麟系统跟Docker的坑已经踩了不少了,之前还有升级完内核导致服务全部都起不来的,一直无法解决,只得切换到podman才没问题。以后如果再弄信创的项目,还是优先尝试用一下podman吧

相关推荐
AR-26710-几秒前
Linux Day22——复习第三部分
linux·运维
迪康coolmu1 分钟前
基于迪康端点安全一体化管理系统的公用终端上机与信创补丁实战
linux·运维·服务器·网络·安全·电脑
blueSatchel4 分钟前
imx6ull显示控制器设备驱动解读
linux·嵌入式
水饺编程8 分钟前
第2章:Linux 基础,关机命令
linux·c语言·汇编
JiMoKuangXiangQu8 分钟前
Linux CFS 负载均衡:从 CPU 拓扑到任务迁移
linux·负载均衡
91刘仁德9 分钟前
计算机网络核心协议全解析:从MAC帧到HTTP
linux·网络·网络协议·tcp/ip·计算机网络·http·udp
承渊政道14 分钟前
极空间部署Portainer实战:Docker Socket、9000端口、容器管理与固定地址访问
运维·docker·容器·内网穿透·cpolar·portainer
禁默1 小时前
玩客云部署EasyVoice实战:HiNas、Docker、ARMv7、9001与固定地址访问(1)
docker·容器·语音识别·cpolar
Brilliantwxx1 小时前
【Linux】IO(上)全篇:文件本质、C 接口、系统调用与文件描述符
linux·运维·服务器·c语言
承渊政道1 小时前
Linux网络学习【深入理解应用层HTTP协议、Cookie与Session机制及HTTPS协议原理】
linux·网络·学习·http·cookie·session