全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

容器与宿主机内核关系

容器并非完全隔离内核,下面深入分析容器与宿主机内核的关系。

共享内核

Bash
宿主机
├── Linux Kernel (共享)
│   ├── Namespace (隔离)
│   └── Cgroups (限制)
└── 容器1 / 容器2 / 容器3

容器共享宿主机内核,仅隔离用户空间,这是与虚拟机的本质区别。

内核版本约束

容器内核版本

Bash
# 容器内核版本 = 宿主机内核版本
docker run --rm ubuntu:22.04 uname -r

# 输出
5.15.0-91-generic  # 宿主机内核版本

容器 OS 版本

Bash
# 容器用户空间 OS 可不同于宿主
docker run --rm ubuntu:22.04 cat /etc/os-release
docker run --rm alpine:3.18 cat /etc/os-release

容器用户空间(发行版、库版本)可独立,但内核版本必须与宿主一致。

内核模块

Bash
# 容器无法加载内核模块
docker run --rm --privileged my-app modprobe xyz

# 错误: modprobe: FATAL: Module xyz not found
# 内核模块必须在宿主加载

内核参数

Bash
# 容器可读取内核参数
docker run --rm my-app cat /proc/sys/net/ipv4/ip_forward

# 修改需要 --privileged
docker run --rm --privileged my-app sysctl -w net.ipv4.ip_forward=1

内核兼容性

系统调用

Bash
# 容器使用宿主系统调用
# 如果容器需要新系统调用,宿主内核必须支持

# 查看容器可用系统调用
docker run --rm my-app strace ls

版本要求

容器特性最低内核版本
Namespace2.6.24
Cgroups2.6.24
overlay24.0
USER Namespace3.8
Cgroups v24.5

安全风险

内核漏洞

Bash
容器共享宿主内核 → 内核漏洞影响所有容器

示例:
CVE-2021-4034 (PwnKit)
- 影响所有容器
- 需升级宿主内核

容器逃逸

text
# 特权容器可访问宿主内核
docker run --rm --privileged my-app cat /proc/version

# 建议:避免 --privileged,使用最小权限

升级策略

text
# 升级宿主内核
sudo apt-get update
sudo apt-get install linux-generic

# 重启宿主机
sudo reboot

# 所有容器自动使用新内核

要点总结

  • 容器共享宿主内核,仅隔离用户空间
  • 容器用户空间 OS 可独立,内核版本必须一致
  • 容器无法加载内核模块,需在宿主加载
  • 内核漏洞影响所有容器,需及时升级宿主内核
  • 避免 --privileged 特权容器,降低内核攻击面

📝 发现内容有误?点击此处直接编辑

← 上一篇 UnionFS 联合文件系统
下一篇 → 容器启动全流程
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库