引言:容器生命周期管理的重要性
"优雅的退出,是容器生命周期管理的艺术。" —— DevOps 最佳实践
在容器化应用的世界里,如何正确地退出容器不仅关系到资源的合理释放,更影响着整个应用的稳定性和数据的完整性。本文将深入探讨 Docker 容器退出的多种方法,帮助你在不同场景下选择最合适的退出策略。
容器退出机制概览
容器状态转换图
stateDiagram-v2
[*] --> Created: docker create
Created --> Running: docker start
Running --> Paused: docker pause
Paused --> Running: docker unpause
Running --> Stopped: docker stop/exit
Running --> Dead: 异常终止
Stopped --> Running: docker restart
Stopped --> Removed: docker rm
Dead --> Removed: docker rm -f
Removed --> [*]
退出码的含义
| 退出码 | 含义 | 常见场景 |
|---|---|---|
| 0 | 正常退出 | 应用程序成功完成任务 |
| 1 | 一般性错误 | 应用程序遇到通用错误 |
| 125 | Docker daemon 错误 | Docker 自身执行失败 |
| 126 | 容器命令不可执行 | 指定的命令无执行权限 |
| 127 | 容器 命令未找到 | 指定的命令不存在 |
| 128+n | 信号终止 | 被信号 n 终止(如 137 = 128 + 9 SIGKILL) |
方法一:使用 docker stop 优雅退出
基本用法
# 优雅停止容器(默认等待10秒)
docker stop container_name
# 指定等待时间
docker stop -t 30 container_name
# 批量停止多个容器
docker stop container1 container2 container3工作原理
docker stop 命令的执行流程:
- 向容器主进程发送 SIGTERM 信号
- 等待指定的超时时间(默认 10 秒)
- 如果容器仍在运行,发送 SIGKILL 信号强制终止