首页/云/云与容器速查/docker kill 强制终止容器
容器与 Docker106 条

docker kill 强制终止容器

直接发送信号(默认 SIGKILL)终止容器:无优雅退出过程,用于进程僵死、stop 无法结束(D 状态)时;日常应优先 stop。

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

强制终止容器

docker kill 向容器内主进程发送信号,默认是 SIGKILL,也就是强制终止:没有优雅退出过程,不做连接收尾,也不等数据落盘。它适用于进程僵死、docker stop 超时仍不退出、以及内核态不可中断状态导致进程无法响应信号等极端情况。日常停容器应优先使用 docker stop,让应用有机会自己结束。

基本信息

默认信号SIGKILL,进程立即终止,没有清理机会
指定信号-s SIGTERM 等可自定义;但发 SIGTERM 本来就该用 docker stop
适用场景stop 超时仍不退、句柄僵死、需要立刻止血的应急情况
直接后果连接硬断,未落盘的数据可能丢失
查看结果docker inspect 看 State.ExitCode 与 OOMKilled 字段
对比命令docker rm -f 相当于终止后直接删除容器,容器内改动一并消失

典型使用场景

  • 应用僵死且 docker stop 已超时仍未退出
  • 容器内句柄泄漏导致进程无法被常规信号终止
  • 应急止血:进程持续冲击宿主资源,需要立刻停下
  • 调试过程中快速清理实验容器,其数据不涉及持久化
  • 批处理容器的清理,前提是结果已落盘到卷或对象存储

使用示例

使用示例
docker kill myapp                                    # 默认发 SIGKILL
docker kill -s SIGTERM myapp                         # 自定义信号的少见用法
docker stop -t 30 myapp                              # 优先用 stop,给 30 秒优雅窗口
docker inspect -f '{{.State.ExitCode}} {{.State.OOMKilled}}' myapp   # 看退出码与 OOM
docker events --filter container=myapp --since 10m   # 回看容器生命周期事件

退出码读法

退出码含义常见原因
0正常退出进程自身执行完毕
137128+9,被 SIGKILL 终止手工 kill、stop 超时强杀、内存超限 OOM
143128+15,被 SIGTERM 终止优雅停止,属正常路径
125docker 自身报错参数或镜像问题,容器并未真正启动
126 与 127命令不可执行或找不到入口脚本、可执行权限或路径问题
kill 之后容器状态变成 Exited,用 docker inspect 看 ExitCode 判断原因:137 不必然等于 OOM,也可能是手工 kill 或宿主内存压力导致的强杀,需要结合 OOMKilled 字段与内核日志区分。
对数据库、消息队列这类带写缓冲的进程,SIGKILL 会跳过刷盘与连接收尾,可能引入数据不一致。这类容器只在确认僵死且常规停止无效时使用 kill,事后按恢复流程校验数据完整性。

易错点

  • 把 kill 用于数据库容器:未落盘事务直接丢失,事后才发现数据不一致
  • 看到退出码 137 就一律归因 OOM:也可能是手工 kill 或宿主内存压力,真正原因被掩盖
  • 用 docker rm -f 代替正常停机:容器文件系统内的改动与现场一并消失,排查失去依据
  • 运维脚本里默认用 kill 停服务:每次都跳过优雅退出,长期累积成零星的数据与连接问题

数据来源与参考

  • Docker Docs:docker kill

相关工具

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