dev.to | 📄 原文链接 | 2026-10-16 收录

Docker 到底怎么工作:看命名空间如何隔离容器,cgroup 如何拦住 fork 炸弹

来源:dev.to — 2026-10-15

📋 概述

在 Linux 主机上启动一个 nginx 容器再跑 ps aux,nginx 就出现在进程列表里,用的是普通的宿主 PID——没有客户机内核,也没有启动 hypervisor。作者的总结是:容器就是一个普通的 Linux 进程,内核同意骗它(命名空间)并给它配额(cgroup),docker run 剩下的事都是把这两样装起来的管道。文章用两个浏览器模拟器走完八个阶段:CLI 是走 /var/run/docker.sock 的 REST 客户端;dockerd 自己不启动你的进程,而是交给 containerd 解包镜像层并跟踪生命周期;OCI bundle 是全部配方,一个 config.json 加一个根文件系统,声明 pid、network、mount、uts、ipc 五个命名空间;runc 建好命名空间和 cgroup、切进 rootfs、丢掉能力、把 nginx 作为 PID 1 exec 起来后自己退出。另一半是 cgroup:命名空间只负责隐藏,不限制任何东西,能拦住 fork 炸弹的是 ulimit -u、cgroup 的 pids.max 或 systemd 的 TasksMax,而这三者数的东西并不一样。

🔑 核心要点

💡 金句

一个没有设置限制的 cgroup 什么都限制不了,而一个 PID 上限也不会限制 CPU 或内存。
← 返回 dev.to 首页