首页/云/云与容器速查/docker stop 优雅停止容器
容器与 Docker106 条

docker stop 优雅停止容器

发送 SIGTERM 等待超时(默认 10s)后 SIGKILL:给进程保存状态、关闭连接的机会;生产务必确认应用能正确处理 SIGTERM。

云与容器速查云更新于 2026-10-13

docker stop 是干什么的

docker stop 优雅停止容器:先给容器主进程发送可捕获的终止信号,等应用保存状态、处理完存量请求,超时后再发强制终止信号。默认等待时间有限,对需要较长收尾时间的应用要显式调大等待时间,否则会被强制杀掉并丢失正在处理的请求。

基本信息

信号流程先发可捕获的终止信号,超时后再强制终止
等待时间用超时参数控制,默认值较短,长收尾流程需要调大
与强杀对比直接强杀不给应用任何收尾机会,容易丢数据
批量停止可对多个容器一次性执行,生产环境务必先确认范围
返回值命令返回即表示停止完成,但要确认退出方式是否符合预期
重启策略设置了自动重启的容器会在停止后按策略重新拉起

典型使用场景

  • 发布前的有序下线:让应用先停止接收新请求再退出
  • 维护窗口操作:停机做数据迁移或配置变更
  • 释放资源:临时容器用完及时停止,避免长期占用内存
  • 故障隔离:异常容器先停下来避免继续影响下游
  • 验证优雅退出:确认应用能正确处理终止信号,为编排环境做准备
  • 批量重启:配合批量命令对一组容器做滚动式停止与启动

停止方式对比

方式行为适用场景
带超时的优雅停止先通知再等待,超时后强杀默认选择,兼顾安全与效率
调大超时延长等待时间收尾流程长、正在处理长请求
直接强杀立即结束进程进程已无响应、必须立刻释放资源
批量停止对多个容器依次执行整批下线,需先确认范围

停止示例

停止示例
docker stop myapp                       # 默认等待时间
docker stop -t 30 myapp                 # 等待 30 秒
docker ps -a --filter "name=myapp"      # 确认停止结果
docker logs --tail 50 myapp             # 核对退出前是否完成收尾
# 收到终止信号就立刻退出的应用,需要先修优雅退出逻辑
应用收到终止信号后应先停止接收新请求、处理完存量请求再退出;没做优雅退出的服务会丢请求,只是往往在低峰期不容易被发现。
等待时间不是越长越好:设得过长会让发布与重启流程长时间卡住,建议按最长请求处理时间来设定。
编排环境下的停止流程由平台发起,参数与容器运行时配置一致:本地验证通过后再上编排,能避免发布时才发现收尾逻辑有问题。
批量停止影响面很大:先确认筛选范围只包含目标容器,生产环境建议逐个环境、逐批执行。

易错点

  • 应用收到终止信号直接退出,正在处理的请求被硬断
  • 等待时间设得过长,发布与重启流程被长时间卡住
  • 对筛选结果不加确认就批量停止,把生产容器一起停下
  • 依赖强杀清理卡住的容器,数据写入中断导致文件损坏
  • 停止后不核对日志,误以为收尾流程正常,问题在下次发布时集中爆发

数据来源与参考

  • Docker Docs:docker stop

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌