共享宿主命名空间意味着什么
--pid=host 让容器与宿主共享 PID 命名空间:容器里能看到宿主进程,也能向它们发信号,隔离性基本消失。--ipc=host、--uts=host 同理。默认应保持各命名空间独立,只在明确的受控诊断场景临时使用。
基本信息
| 语义 | 容器进程与宿主处于同一 PID 视图 |
|---|---|
| 风险 | 可见宿主进程、可发信号、调试面扩大 |
| 同类参数 | --ipc=host、--uts=host、--network=host |
| 替代方案 | 宿主侧诊断工具或受控的临时容器 |
| 核查 | inspect 的 PidMode、IpcMode、UTSMode |
典型使用场景
- 批量审计现有容器,找出共享宿主命名空间的实例
- 迁移或升级前检查模板里是否带进了这类参数
- 确有需要的诊断场景:限定人员、时长与镜像后临时使用
- 安全基线核对:把这些参数列为评审项
- 事故复盘:确认隔离边界是否被削弱
批量核查
批量核查
docker ps -q | xargs -r docker inspect \
-f '{{.Name}} pid={{.HostConfig.PidMode}} ipc={{.HostConfig.IpcMode}} uts={{.HostConfig.UTSMode}}'
docker inspect -f '{{.HostConfig.Privileged}}' <容器> # 与特权模式叠加时风险更大同类参数的风险面
| 参数 | 共享内容 | 典型风险 |
|---|---|---|
| --pid=host | 宿主进程视图 | 可查看并影响宿主进程 |
| --ipc=host | 进程间通信资源 | 共享内存与消息队列互相影响 |
| --uts=host | 主机名与域名 | 改变宿主标识,影响依赖名称的服务 |
| --network=host | 宿主网络栈 | 端口与连接可见性完全放开 |
诊断场景确实需要共享命名空间时,限定专人、限定时长、限定镜像,用完即删,并把这次使用记录下来。
与 privileged 叠加时权限面明显扩大,审计要按组合项而不是单项看待。
迁移或升级后这些参数常从复制粘贴的模板带进来,属于模板级隐患,检查要覆盖编排文件而不只看运行中的容器。
需要观察宿主进程但不希望放开信号能力时,宿主侧诊断工具通常比共享命名空间更合适。
Compose 里同样可以声明这些参数,仓库中历史编排模板要一并纳入排查范围。