docker pause/unpause 用于冻结/解冻容器进程,不释放内存、网络或中断tcp连接,状态完全保留;pause依赖cgroups freezer,unpause通过sigcont唤醒,毫秒级恢复,适用于临时维护、调试与资源调度。

要安全暂停与恢复容器内所有进程的执行,关键不是用 stop 或 down,而是使用 docker pause 和 docker unpause ——它们真正实现“冻结/解冻”,不中断内存、连接和运行时上下文。
暂停容器:冻结进程但保留全部状态
执行 docker pause 容器名或ID 后,容器内所有进程立即进入不可中断睡眠状态(Uninterruptible Sleep),底层依赖 Linux cgroups freezer 子系统,不发任何信号。此时:
- CPU 调度完全停止,不消耗 CPU 资源
- 内存数据、打开的文件、TCP 连接、线程堆栈全部原样保留
- 容器网络、挂载卷、端口映射等配置维持不变
- 状态在
docker ps中显示为 Paused
批量暂停 Compose 服务容器
Docker Compose 本身没有 pause 命令,但它创建的容器仍是标准 Docker 容器,可直接用 docker pause 操作:
- 先查出当前运行的服务容器 ID:
docker-compose ps -q - 再一键暂停全部:
docker pause $(docker-compose ps -q) - 如只想暂停特定服务,可按名称操作:
docker pause myapp_web_1 myapp_cache_1
恢复容器:毫秒级继续执行
docker unpause 会向被冻结的 cgroup 发送 SIGCONT,唤醒所有进程。恢复后:
- 应用从暂停那一刻精确续跑,无重启开销
- 原有连接不会断开(比如长连接、数据库会话仍有效)
- 验证方式:
docker-compose ps的 STATUS 列应显示 Up(非 Up (Paused)) - 仅对处于
Paused状态的容器生效;已stopped或exited的容器会报错
pause/unpause vs stop/down 的核心区别
三者用途完全不同,选错可能导致服务中断或状态丢失:
-
docker pause:临时“静音”,适合调试、快照、资源腾挪 -
docker-compose stop:发SIGTERM终止主进程,释放资源,再start是全新启动 -
docker-compose down:stop + 删除容器和网络,卷默认保留(加--volumes才删)











