linux namespaces 共有六大类型:pid隔离进程id、network隔离网络栈、mount隔离文件挂载、uts隔离主机名与域名、ipc隔离进程间通信资源、user隔离用户/组id映射及权限。

Linux namespaces 的六大类型各自隔离一类系统资源,互不干扰,也不叠加影响。每种 namespace 都只控制自己负责的那部分视图,进程在其中看到的资源是“专属”的,与其他 namespace 完全不可见。
PID namespace:进程 ID 的独立编号空间
同一进程在不同 PID namespace 中可拥有不同 PID;子 namespace 中的 init 进程(PID=1)在父 namespace 中有真实 PID(如 55、66)。子 namespace 无法看到父或兄弟 namespace 中的进程,ps 命令只列出当前 namespace 内的进程。但父 namespace 仍能观察所有子 namespace 的进程状态。
Network namespace:网络栈的完全私有化
每个 Network namespace 拥有独立的:
- 网络设备(含虚拟网卡 veth pair 的一端)
- IPv4/IPv6 协议栈和路由表
- iptables/nftables 规则、/proc/net 和 /sys/class/net 内容
- 端口(socket)绑定能力 —— 两个 namespace 可同时监听 8080
lo 接口默认为 DOWN,需手动 ip link set lo up 启用;跨 namespace 通信需靠 veth pair + 路由配置实现。
Mount namespace:文件系统挂载点的视图隔离
进程只能看到自己 Mount namespace 中的挂载信息(mount、/proc/mounts),对其他 namespace 的挂载无感知。支持私有挂载(private)、从属挂载(slave)等传播模式,常用于容器 rootfs 封装和 chroot 增强。
UTS namespace:主机名与域名的逻辑分离
隔离 uname() 系统调用返回的 nodename(hostname)和 domainname。容器可设为 web-server-01,宿主机仍是 host-main,彼此 DNS 解析和网络标识互不影响。
IPC namespace:进程间通信资源的独立命名空间
隔离 System V IPC(消息队列、信号量、共享内存)和 POSIX 消息队列的标识符。同一 IPC namespace 内进程可正常通信;跨 namespace 则无法通过 key 或 name 查找对方资源,即使 key 相同也指向不同实例。
User namespace:用户/组 ID 映射与权限边界
允许将外部 UID/GID(如宿主机的 1001)映射为内部 UID/GID(如 namespace 内的 0),从而让普通用户在容器内以 root 身份运行,却不具备宿主机 root 权限。它还隔离了 /proc/[pid]/status 中的 Uid/Gid 字段显示,并配合 capabilities 实现细粒度权限控制。










