直接回答:namespace 提供内核资源的隔离视图,让每组进程"看到"一套独立的系统环境。容器本质上就是若干 namespace 的组合,再加上 cgroup 做资源限额;它比传统 chroot 只换根目录的做法隔离维度全面得多。

展开解析:目前主要有七种:mnt(挂载点隔离,配合 pivot_root 给容器独立根文件系统)、pid(独立进程编号空间,容器内有自己的 PID 1)、net(独立网卡、协议栈、端口和 iptables 规则)、ipc(System V IPC 与 POSIX 消息队列)、uts(独立 hostname)、user(UID/GID 映射,容器内 root 可映射为宿主机普通用户,是 rootless 容器的安全基础)、cgroup namespace(隔离 /sys/fs/cgroup 视图)。创建通过 clone/unshare 系统调用携带 CLONE_NEW* 标志完成;每个 namespace 在 /proc/<pid>/ns/ 下是一个符号链接,同一 namespace 的进程指向同一个 inode,可据此判断两个进程是否同处一个命名空间。

实践要点:排障时用 nsenter -t <pid> -n -p 进入容器的网络和进程命名空间执行命令。记住分工:namespace 决定进程"看得见什么",cgroup 决定它"用得了多少",两者缺一不可。

追问方向:为什么早期容器里 top 显示的是宿主机内存(/proc 视图不隔离,lxcfs 的动机)?user namespace 为什么能显著提升安全性?PID namespace 里 PID 1 退出会怎样?