插件窝 干货文章 docker中stop和pause有什么区别

docker中stop和pause有什么区别

容器 Docker 进程 冻结 615    来源:    2025-05-03

在Docker中,stoppause是两种不同的容器状态管理命令,主要区别如下:


1. docker stop

  • 作用优雅终止容器运行。
  • 原理
    • 发送 SIGTERM 信号给容器内的主进程(PID 1),允许进程自行清理资源。
    • 若进程未在默认10秒内退出,则强制发送 SIGKILL 终止(可通过 -t 调整超时时间)。
  • 结果
    • 容器进入 Exited 状态。
    • 释放所有资源(CPU/内存/网络等)。
    • 文件系统保留,可通过 docker start 重新运行。
  • 适用场景:需要完全停止容器并释放资源时。

示例

docker stop my_container  # 停止容器
docker start my_container # 重新启动

2. docker pause

  • 作用冻结容器进程,不终止运行。
  • 原理
    • 利用 Linux Cgroups 和内核的 freezer 功能,暂停所有进程的执行(CPU/IO 冻结)。
    • 不发送终止信号,进程状态保持为 "Paused"。
  • 结果
    • 容器进入 Paused 状态。
    • 资源占用仍存在(如内存),但进程不消耗 CPU。
    • 可通过 docker unpause 立即恢复运行(从冻结点继续)。
  • 适用场景:临时调试、快速暂停/恢复服务。

示例

docker pause my_container   # 冻结容器
docker unpause my_container # 恢复运行

核心区别对比

特性 docker stop docker pause
状态变化 RunningExited RunningPaused
资源释放 完全释放 仅冻结(内存不释放)
恢复方式 需重新启动(docker start 立即恢复(docker unpause
进程处理 终止进程 冻结进程
典型用途 长期停止服务 临时暂停(如调试备份)

如何选择?

  • 需要彻底停止并释放资源 → 用 stop
  • 需要临时冻结并快速恢复 → 用 pause(例如保留现场排查问题)。

补充说明

  • 数据持久性:两者均不会删除容器或卷数据。
  • 信号处理:若容器内进程未正确处理 SIGTERMstop 可能导致强制终止(需检查应用逻辑)。

通过理解这些差异,可以更精准地控制容器生命周期。