github编辑

终止

终止方式概述

终止容器有三种方式:

方式
命令
说明

优雅停止

docker stop

先发 SIGTERM,超时后发 SIGKILL

强制停止

docker kill

直接发 SIGKILL

自动终止

-

容器主进程退出时自动停止


docker stop(推荐)

基本用法

$ docker stop 容器名或ID

工作原理

docker stop mycontainer


┌─────────────────────────────────────────────────────────────────┐
│  1. 发送 SIGTERM 信号给容器主进程(PID 1)                        │
│        ↓                                                        │
│  2. 等待容器优雅退出(默认 10 秒)                                │
│        ↓                                                        │
│  3. 如果超时仍未退出,发送 SIGKILL 强制终止                       │
└─────────────────────────────────────────────────────────────────┘

自定义超时时间

停止多个容器


docker kill

基本用法

与 stop 的区别

命令
信号
使用场景

docker stop

SIGTERM → SIGKILL

正常停止,让应用优雅退出

docker kill

SIGKILL

应用无响应,强制终止

发送自定义信号


容器自动终止

容器的生命周期与主进程绑定。主进程退出时,容器自动停止:


查看已停止的容器

STATUS 字段说明

状态
说明

Up X minutes

运行中

Exited (0)

正常退出(退出码 0)

Exited (1)

异常退出(非零退出码)

Exited (137)

被 SIGKILL 终止(128 + 9)

Exited (143)

被 SIGTERM 终止(128 + 15)


重新启动容器

启动已停止的容器

重启运行中的容器


生命周期状态图


批量操作

停止所有容器

删除所有已停止的容器

停止并删除所有容器


常见问题

Q: 容器停止很慢

原因:应用没有正确处理 SIGTERM 信号,需要等待超时后强制终止。

解决方案:

  1. 在应用中正确处理 SIGTERM

  2. 使用 docker stop -t 0 立即终止

  3. 检查 Dockerfile 中的 STOPSIGNAL 配置

Q: 如何让容器优雅退出

确保容器主进程正确处理信号:

Q: 容器无法停止


本章小结

操作
命令
说明

优雅停止

docker stop

先 SIGTERM,超时后 SIGKILL

强制停止

docker kill

直接 SIGKILL

重新启动

docker start

启动已停止的容器

重启

docker restart

停止后立即启动

停止全部

docker stop $(docker ps -q)

停止所有运行中容器

延伸阅读

最后更新于