15.2.1 系统要求与内核依赖检查
系统要求与内核依赖检查#
本节聚焦 Docker 在 Linux 上的运行前置条件,确保内核能力、模块与网络转发满足容器运行与隔离需求,并给出可执行检查、排错与练习。
1. 原理概览(内核能力与容器关系)
2. 系统与内核要求(建议值)
- 64 位系统必需
- 内核建议:3.10+(生产推荐 4.x/5.x LTS)
- 发行版建议:CentOS 7/8、Rocky/AlmaLinux 8/9、Ubuntu 20.04/22.04、Debian 10/11
- 关键能力:cgroups、namespaces、overlayfs、桥接转发
3. 一键检查脚本(含命令解释)
# 文件:/opt/check_docker_kernel.sh
# 作用:检查内核版本、cgroups、命名空间、模块与文件系统驱动
# 用法:bash /opt/check_docker_kernel.sh
set -e
echo "== 内核版本 =="
uname -r
# 解释:输出内核版本,需>=3.10
echo "== cgroups 目录 =="
ls /sys/fs/cgroup
# 解释:存在cpu/memory等目录说明cgroups可用
echo "== 命名空间 =="
ls -l /proc/self/ns/
# 解释:应看到pid/net/mnt/uts/ipc/user等链接
echo "== 存储驱动支持 =="
grep -E 'overlay|aufs' /proc/filesystems
# 解释:overlay建议;aufs可识别但已弃用
echo "== 关键网络模块 =="
lsmod | egrep 'br_netfilter|ip_tables|nf_nat|overlay'
# 解释:需加载br_netfilter与iptables相关模块
echo "== 关键sysctl参数 =="
sysctl -n net.bridge.bridge-nf-call-iptables
sysctl -n net.bridge.bridge-nf-call-ip6tables
sysctl -n net.ipv4.ip_forward
# 解释:桥接流量进入iptables且开启转发
4. 关键参数与持久化配置示例
# 临时生效(重启后失效)
modprobe br_netfilter
sysctl -w net.bridge.bridge-nf-call-iptables=1
sysctl -w net.bridge.bridge-nf-call-ip6tables=1
sysctl -w net.ipv4.ip_forward=1
# 持久化配置
cat >/etc/sysctl.d/99-docker.conf <<'EOF'
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
5. 常见问题排错与处理
- 内核过低
- 现象:uname -r < 3.10,或 Docker 启动失败
- 处理:升级内核或更换发行版(建议 LTS 内核)
- br_netfilter 未加载
- 现象:容器间网络不通、iptables 规则不生效
- 处理:
bash
modprobe br_netfilter
lsmod | grep br_netfilter
- cgroups 缺失
- 现象:启动 Docker 提示 cgroups 不支持
- 处理:确认系统为官方内核或启用相关编译选项
- overlay2 不可用
- 现象:Docker 报存储驱动错误
- 处理:升级内核或切换为支持的驱动(overlay2 优先)
6. 验收标准(检查通过即合格)
- uname -r 满足要求
- /sys/fs/cgroup 存在 cpu/memory/pids 等目录
- /proc/self/ns/ 中命名空间齐全
- overlay 与 br_netfilter 模块已加载
- sysctl 参数生效且持久化
7. 练习与验证
1) 使用脚本完成检查,记录输出结果:
bash /opt/check_docker_kernel.sh | tee /tmp/docker_kernel_check.log
2) 故意关闭桥接转发,观察变化并恢复:
sysctl -w net.bridge.bridge-nf-call-iptables=0
sysctl -n net.bridge.bridge-nf-call-iptables
sysctl -w net.bridge.bridge-nf-call-iptables=1
3) 写出一句话解释以下命令作用:
- ls /sys/fs/cgroup
- grep -E 'overlay|aufs' /proc/filesystems
- modprobe br_netfilter
完成本节后,进入“Docker安装方式对比与选择”。