docker pause 用于冻结容器进程,cpu归零但保留内存、网络连接和文件系统状态,适用于调试、快照或临时释放算力等需“定格运行现场”的场景。

直接用 docker pause 就能冻结容器内所有进程,不终止、不重启,只是让它们“定格”在当前执行点。
pause 的核心作用是冻结,不是停止
它底层调用 Linux cgroups freezer 功能,把容器所属 cgroup 内所有进程统一置为 FROZEN 状态。此时:
- 进程不再被内核调度,CPU 占用立刻归零(
docker stats显示 CPU% 恒为 0.00%) - 内存完全保留:堆、栈、打开的文件描述符、Redis 缓存、未提交事务全留在 RAM 中
- TCP 连接保持 ESTABLISHED 状态,端口不释放,但无法收发新数据
- 挂载卷、bind mount、网络命名空间等结构原样存在,无任何销毁或重建
怎么执行 pause 操作
命令极简,无需额外参数:
- 暂停单个容器:
docker pause webapp或docker pause abc123f8 - 一次暂停多个:
docker pause nginx redis celery-worker
执行后,docker ps 中该容器状态会显示为 Up (Paused)。
暂停后能做什么、不能做什么
可以确认效果,但不能干预运行时:
- ✅ 查看资源状态:
docker stats webapp观察 CPU 是否为 0.00%,内存值是否稳定 - ✅ 检查连接残留:
netstat -tnp | grep :端口号在宿主机上仍能看到 ESTABLISHED 连接 - ❌ 无法
docker exec -it webapp sh:init 进程已被冻结,新进程无法启动 - ❌ 不能对已
stopped的容器执行 pause,会报错
什么时候该用 pause 而不是 stop
关键看是否需要保留运行现场:
- 调试竞态条件或偶发异常时,用 pause “冻住”问题瞬间,stop 会丢失上下文
- 做一致性快照前,pause 可确保内存状态与磁盘数据严格同步
- 临时释放 CPU 给高优先级服务,又不想丢 Redis 缓存或长连接
- 健康检查仍需通过的场景(如注册中心未感知下线),pause 后容器仍在网络中











