docker pause/unpause可毫秒级暂停和恢复容器,冻结/解冻进程但保留内存、网络连接等全部状态,不重启、不丢数据;pause用cgroup freezer挂起进程,unpause发sigcont信号恢复执行。

直接用 docker pause 和 docker unpause 就能控制容器的暂停与恢复,不需要重启或丢失状态,整个过程毫秒级完成。
暂停容器:冻结进程但保留全部状态
执行 docker pause 容器名或ID 后,容器内所有进程会被挂起(通过 cgroups freezer 子系统),但内存、文件系统、网络连接、打开的文件描述符都原样保留。此时容器状态变为 paused,CPU 不再调度,但内存不释放。
- 可一次暂停多个容器:
docker pause web db cache - 暂停后仍可通过
docker ps查看,STATUS 列显示为 Up X minutes (Paused) - 暂停中无法执行
docker exec或接收新请求,但已有 TCP 连接不会断开(如正在传输的下载任务)
恢复容器:从挂起点继续运行
docker unpause 容器名或ID 会向所有被冻结进程发送 SIGCONT 信号,让它们立刻从暂停位置继续执行。整个过程不重新加载程序、不重置内存、不重建网络栈——就像按下播放键一样自然。
- 支持批量恢复:
docker unpause app1 app2 - 只能对当前处于 paused 状态的容器操作,对 running 或 exited 容器会报错
- 恢复后应用行为与暂停前完全一致,比如 qbittorrent 会接着上次断点继续下载
和 stop / start 的关键区别
pause/unpause 是轻量级状态切换,而 stop/start 是完整生命周期重启:
- 内存是否保留:pause/unpause 全部保留;stop/start 会清空运行时内存,重新初始化进程
- 速度差异:前者通常在几毫秒内完成;后者需重新加载镜像层、启动进程、初始化网络,耗时数秒
- 连接是否中断:pause 后已建立的 TCP 连接维持;stop 必然断开,客户端需重连
- 适用场景不同:临时让出 CPU 资源用 pause;彻底清理环境或更新配置用 stop/start
怎么确认容器当前是否可恢复
先查状态再操作,避免命令失败:
- 列出所有容器及状态:
docker ps -a,关注 STATUS 列 - 单独查看某容器状态:
docker inspect -f '{{.State.Status}}' 容器名,返回 paused 才能 unpause - 如果看到 exited 或 created,说明容器没在运行,得用
docker start而不是 unpause











