docker pause 是什么
pause 借助内核的 cgroup freezer 机制冻结容器内全部进程:进程被挂起,不参与 CPU 调度,但内存、打开的文件描述符与已占用的端口都保持在原状态。unpause 之后从断点继续执行,属于「暂停」而不是「停止」。它与 stop 的区别很关键——stop 会终止进程并释放资源,pause 只是让进程不动,随时可以原样复活。
基本信息
| 语法 | docker pause 容器 / docker unpause 容器 |
|---|---|
| 状态查看 | docker ps --filter status=paused |
| 资源影响 | CPU 占用降为零;内存与端口仍被占用 |
| 实现机制 | cgroup freezer 冻结整个容器进程组 |
| Compose 对应 | docker compose pause / unpause 服务 |
| 适用平台 | Linux 容器;Windows 容器不支持该能力 |
典型使用场景
- 临时让出 CPU:机器上跑压测或构建任务时,先冻结非关键容器
- 演练故障:验证上游超时与重试逻辑,而不必真的杀掉服务
- 保护现场:需要保持进程内存状态排查问题时,避免它继续改数据
- 维护窗口前的软停机:先暂停写入类任务,再进入正式维护
- 节省开发机资源:长时间不用的容器先冻结而不是删除
冻结与恢复
冻结与恢复
# 冻结容器:进程立刻停止消耗 CPU,但内存与端口保持占用
docker pause web
# 用状态过滤确认已冻结(STATUS 列显示 Up ... (Paused))
docker ps --filter status=paused
# 核对资源:内存仍被占用,这是 pause 与 stop 的关键差别
docker stats --no-stream web
# 恢复运行,进程从暂停点继续
docker unpause web
# 不需要继续时改用停止,才会真正释放资源
docker stop webpause 与相邻操作对比
| 操作 | 进程状态 | CPU | 内存与端口 | 恢复方式 |
|---|---|---|---|---|
| pause | 挂起 | 不占用 | 仍占用 | unpause 原样继续 |
| stop | 终止 | 不占用 | 释放 | start 重新启动 |
| kill | 强杀 | 不占用 | 释放 | start 重新启动 |
| restart | 终止后重启 | 短暂占用 | 释放重建 | 自动完成 |
冻结期间容器的健康检查会失败,编排平台可能据此判定不健康并把流量切走或重建容器。做长时间挂起前先确认平台的反应策略。
被挂起的服务对客户端就是无响应,长连接与上游网关多半会超时并触发重试。高流量时段不要对在线服务做长时间挂起,避免引发连锁重试。