docker kill 是什么
向容器主进程发送信号,默认发送强杀信号,立即终止进程。它不等待应用自行收尾,因此适合处理已经失去响应、优雅停止无效的场景;也可以指定其他信号,让支持的应用重载配置或做其它动作。
基本信息
| 语法 | docker kill [选项] CONTAINER... |
|---|---|
| 默认信号 | 强杀信号,进程立即终止 |
| 指定信号 | 用信号名或编号指定,例如终止信号、重载信号 |
| 与优雅停止的差别 | 不先发终止信号,也不等待 |
| 适用对象 | 无响应的进程、需要特定信号的场景 |
典型使用场景
- 进程卡死无响应:优雅停止已经无效,直接用强杀结束
- 触发配置重载:向支持重载信号的应用发送信号,避免整容器重启
- 自定义信号处理:某些服务用特定信号做日志切割或切换
- 紧急处置:异常进程占用资源过高时快速终止
- 测试信号处理:验证应用对不同信号的响应是否符合预期
常用示例
常用示例
docker kill web # 默认强杀
docker kill -s TERM web # 发送终止信号,等同优雅停止的第一步
docker kill -s HUP web # 支持重载的应用会重新读取配置
docker kill -s SIGUSR1 web # 发出应用自定义信号
docker ps -a --filter status=exited # 确认状态与退出码常用信号与含义
| 信号 | 常见含义 | 使用提醒 |
|---|---|---|
| 强杀信号 | 立即终止,不给收尾机会 | 数据库类服务可能出现恢复流程 |
| 终止信号 | 请求进程正常退出 | 等价于优雅停止的第一步,只是不等待 |
| 挂起信号 | 多数服务语义是重载配置 | 也有服务用它终止进程,用前先确认 |
| 用户自定义一号 | 由应用自行定义 | 常用于日志切割或状态输出 |
| 中断信号 | 相当于键盘中断 | 对交互式应用有用,服务类应用少见 |
选用信号的思路
- 需要数据完整时优先用优雅停止,不要直接用强杀
- 只是想重载配置时,先确认应用对挂载信号的处理方式
- 强制终止之后检查退出码,确认是否符合预期
- 有状态服务强杀后要观察恢复情况,必要时做一致性校验
- 把信号使用方式写进运维手册,避免不同人做出不同处置
与优雅停止的核心差别在于是否等待收尾。停止命令先请求退出并等待,超时才强杀;直接发送强杀信号则一步到位,没有缓冲。
同一信号在不同应用里语义可能完全不同。发信号前确认应用文档或代码中的处理逻辑,尤其是有状态服务,贸然发送可能造成数据不一致。