docker创建容器发现无法端口映射,缺少内核模块加载

解决

  • 加载依赖内核支持自启动

什么是 /etc/modules-load.d/

/etc/modules-load.d/ 目录包含在系统启动时自动加载内核模块的配置文件。

docker-net.conf 文件内容

Docker 网络相关的配置文件可能包含以下模块:

1
2
3
4
5
6
7
8
# 加载 Docker 网络相关模块
bridge
veth
ip_tables
iptable_nat
iptable_filter
nf_nat
nf_conntrack

根据实际情况不同操作系统依赖内核模块名字存在不一样。

重新加载模块的方法

1. 重启系统服务

1
2
3
4
5
# 重新启动 systemd-modules-load 服务
sudo systemctl restart systemd-modules-load

# 或者重新启动 Docker 服务
sudo systemctl restart docker

2. 手动加载模块

1
2
3
4
# 手动加载模块(如果知道具体模块名)
sudo modprobe bridge
sudo modprobe veth
sudo modprobe ip_tables

3. 卸载并重新加载模块

1
2
3
4
5
6
7
# 先卸载模块
sudo rmmod bridge veth ip_tables

# 然后重新加载
sudo modprobe bridge
sudo modprobe veth
sudo modprobe ip_tables

4. 检查模块状态

1
2
3
4
5
# 查看已加载的模块
lsmod | grep -E "bridge|veth|iptable"

# 查看模块依赖关系
modinfo bridge

验证 Docker 网络

重新加载后,验证 Docker 网络是否正常工作:

1
2
3
4
5
6
7
8
9
# 检查 Docker 网络
docker network ls

# 测试创建网络
docker network create test-network

# 检查网络接口
ip link show
brctl show # 如果安装了 bridge-utils