docker pause/unpause 本质是通过 cgroup freezer 冻结/恢复容器内所有进程,保留内存、网络连接等完整状态,不释放 RAM,毫秒级恢复;适用于需瞬时定格又无缝续跑的场景。
pause 和 unpause 的作用本质
docker pause 不是停止容器,而是冻结它内部所有进程的执行。容器仍保留在内存中,状态(包括内存数据、打开的文件、网络连接等)完整保留,但不再消耗 cpu 时间片。这类似于给一个正在运行的程序按下了“暂停键”,而不是关机。
什么时候该用 pause/unpause 而不是 stop/start
当你需要临时中断容器服务,但又希望它立刻恢复、且不能丢失运行时状态时,pause/unpause 更合适。比如:
- 做快速一致性快照前,冻结应用避免数据变动
- 调试期间临时“定格”某个中间状态,检查内存或进程树
- 资源紧张时临时释放 CPU,但不想清空内存重载(stop 会丢内存,start 需重新初始化)
- 配合 cgroup 做细粒度资源调控,比如临时限制某容器 CPU 使用率
实际操作要点
使用方式简单,但要注意几个关键细节:
- 执行 docker pause 容器名或ID 后,容器状态变为 Paused,可用 docker ps -a 查看
- 暂停中的容器仍占用内存,不释放 RAM;也不响应任何外部请求(如 HTTP 请求会超时)
- docker unpause 容器名或ID 会立即恢复所有进程,几乎无延迟,原状态无缝延续
- 暂停对容器内进程是透明的——进程不会收到信号,也不会触发 shutdown 流程,因此不适合需要优雅关闭的场景(如数据库写入未完成)
底层依赖的是 cgroup freezer
Docker 本身不实现暂停逻辑,而是调用 Linux 内核的 cgroup v1 freezer(或 cgroup v2 的 freezer controller)来挂起整个进程组。这意味着:
- 暂停是内核级操作,稳定可靠,无需容器内进程配合
- 只适用于支持 freezer 的系统(主流 Linux 发行版默认开启)
- 容器必须运行在支持该特性的宿主机上;Windows/macOS 上的 Docker Desktop 是通过 Linux 虚拟机实现的,也支持


















