docker pause 通过 cgroups freezer 将容器进程置为 FROZEN 状态,使其停止执行但保留内存、网络连接和文件系统;unpause 则发送 SIGCONT 恢复调度,毫秒级续跑。

容器通过 pause 和 unpause 实现进程的冻结与唤醒,不终止进程、不丢失状态,本质是利用 Linux cgroups freezer 子系统对所有容器内进程做统一挂起和恢复。
pause 是怎么让进程“停住”的
执行 docker pause 容器名 后,Docker 会调用底层 cgroups 的 freezer 控制器,把该容器下所有进程的状态设为 FROZEN。此时:
- 进程不再被 CPU 调度,完全停止执行,但内存数据、打开的文件描述符、网络连接状态全部保留
- 容器仍显示为
paused状态(可通过docker ps -a查看) - 不会触发应用的 shutdown 流程,也不释放内存或网络资源
unpause 是怎么“接着跑”的
执行 docker unpause 容器名 时,Docker 向 frozen 进程组发送 SIGCONT 信号,cgroups 解除冻结:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 所有进程立即恢复调度,从暂停前的精确位置继续执行
- 耗时极短,通常在毫秒级,比 stop + start 快得多
- 仅对
paused状态的容器有效;running 或 exited 状态执行 unpause 会报错
什么时候该用 pause/unpause 而不是 stop/start
关键区别在于是否需要保持运行时上下文:
- 调试卡顿或死锁问题:pause 住现场,再
docker exec -it 容器名 sh进去查堆栈、线程、内存占用 - 临时缓解宿主机 CPU 过载:暂停非关键服务(如日志聚合、离线计算任务),而不中断其内部状态
- 避免重连开销:数据库客户端、消息队列消费者等长连接应用,pause/unpause 不断连、不重试、不丢消息
- 不适用于资源彻底回收场景——pause 不释放内存,stop 才真正释放资源
操作注意事项
几个容易踩坑的点:
- 支持批量操作:
docker pause web db cache可一次暂停多个容器 - 不能跨状态操作:已 stop 的容器无法 unpause,必须先 start;已 exit 的容器需先 run 起来才能 pause
- pause 不等于 freeze 文件系统:容器内文件读写仍在内存缓存中,但 I/O 请求会被阻塞直到 unpause
- 部分特权容器或使用 --pid=host 的容器可能不受 freezer 控制,pause 效果受限

















