docker pause用于冻结容器进程,CPU归零但保留内存、网络连接和文件系统状态,适用于需定格运行现场的短时操作,如调试竞态条件或配合快照备份。
docker pause 是一个轻量、即时生效的资源释放手段,不终止容器,只冻结进程,cpu 占用立刻归零,同时保留内存、网络连接和文件系统状态。它适合需要“定格运行现场”的短时操作,不是替代 stop 的通用停机方案。
什么时候该用 pause 而不是 stop
核心判断依据是:是否需要保留容器当前全部运行时状态。
- 要保留 Redis 内存缓存、未提交的数据库事务、长连接(如 WebSocket 或数据库连接),就用 pause
- 只是想关掉服务、清空内存、释放端口,就用 stop
- 正在调试竞态条件或排查偶发异常,pause 可以“冻住”问题瞬间,stop 会丢失上下文
- 配合备份工具做一致性快照前,pause 能确保磁盘数据与内存状态严格同步
执行暂停的正确方式
命令简单直接,但要注意命名和批量操作的写法:
- 暂停单个容器:docker pause webapp 或 docker pause abc123f8
- 一次暂停多个:docker pause nginx redis celery-worker
- 执行后容器状态变为 Up (Paused),可用 docker ps 确认
- 不能对已处于 stopped 状态的容器执行 pause,会报错
暂停后资源到底怎么变
关键不是“停了”,而是“怎么停”——底层靠 cgroups freezer 实现,行为非常确定:
- CPU 归零:内核不再调度该容器内任何进程,宿主机 top 或 docker stats 显示 CPU% 持续为 0.00%
- 内存不释放:整个进程地址空间保留在 RAM 中,包括堆、栈、打开的文件描述符
- 网络接口还在:端口未被释放,已有 TCP 连接维持 ESTABLISHED 状态,但无法收发新数据
- 磁盘无 I/O:进程冻结,自然不触发读写;挂载卷、bind mount 等结构完整保留
- 无法 exec 进入:init 进程被冻结,docker exec -it 会失败
验证暂停是否真正生效
两个快速确认方法,避免误判:
- 运行 docker stats 容器名,观察 CPU% 是否稳定在 0.00%,内存值不变
- 尝试 docker exec -it 容器名 ps aux:若返回错误,说明已冻结;若能进入,进程状态列应显示 T(stopped)或 D(uninterruptible sleep)
恢复只需一条命令:docker unpause 容器名,进程从冻结点继续执行,毫秒级响应,不重启、不重载配置、不丢连接。


















