CentOS 7启动时自动加载自定义内核模块

CentOS 7 启动时自动加载**,这是非常合理的做法——这样能确保 Docker 每次启动前,内核网络模块都已就绪,避免端口映射失败。


方式一:写入 /etc/modules-load.d/ 自动加载配置

CentOS 7 使用 systemd,官方推荐做法是通过 modules-load.d

1.1创建配置文件:

1
sudo vi /etc/modules-load.d/docker-net.conf

1.2写入以下内容:

br_netfilter
ip_tables
xt_nat

1.3保存退出,然后立即加载一次:

1
sudo systemctl restart systemd-modules-load

1.4验证:

1
lsmod | grep -E 'br_netfilter|ip_tables|xt_nat'

💡 效果:
系统每次启动时,systemd-modules-load 会自动加载这些模块。


方式二:使用 /etc/rc.local(传统兼容方案)

2.1编辑文件:

1
sudo vi /etc/rc.d/rc.local

2.2在 exit 0 前加入:

1
2
3
modprobe br_netfilter
modprobe ip_tables
modprobe xt_nat

2.3确保 rc.local 可执行:

1
2
sudo chmod +x /etc/rc.d/rc.local
sudo systemctl enable rc-local

方式三:写入 /etc/sysconfig/modules/(RHEL/CentOS 老方法)

3.1新建脚本:

1
sudo vi /etc/sysconfig/modules/docker-net.modules

3.2写入:

1
2
3
4
#!/bin/bash
for module in br_netfilter ip_tables xt_nat; do
/sbin/modprobe $module >/dev/null 2>&1
done

3.3赋予执行权限:

1
sudo chmod +x /etc/sysconfig/modules/docker-net.modules

💡 该目录下的 .modules 文件会在启动阶段自动执行,非常适合内核模块初始化。


4验证自动加载是否生效

重启系统后执行:

1
2
3
sudo reboot
# 重启后执行:
lsmod | grep -E 'br_netfilter|ip_tables|xt_nat'

若都在列表中,即说明生效。