返回目录实战:容器反复重启,从退出码与日志定位原因
容器反复重启时,先不要把 restart 策略关掉或不断重建。应把退出原因、健康状态、资源和应用日志放进同一时间窗口分析。
<!-- more -->
## 记录退出原因
先检查 State 中的 ExitCode、Error、OOMKilled 与 FinishedAt,再读取近期日志。退出码 137 可能与 SIGKILL 有关,但不能单凭这一数字认定是内存不足;需要结合 OOMKilled 与内核日志。
## 分清进程退出与健康异常
unhealthy 不必然等于容器退出。Docker 的普通 restart 策略通常围绕进程退出生效,健康检查本身并不自动提供所有恢复行为。先明确编排工具的实际规则,再解释看到的状态。
## 从首次错误开始
数据库连接拒绝、配置解析失败和目录权限错误,可能都导致入口脚本退出。先找到第一次具体错误,后续重试日志通常只是同一问题的重复。容器内的 localhost 指向也要结合网络模式判断。
## 验证修复而不是只看 Up
修复配置后观察服务是否保持运行,并从入口执行实际请求。保留日志与变更记录;如果必须重建,先确认数据挂载、当前镜像和备份,不要用重装覆盖故障证据。
## 操作参考
```text
docker inspect CONTAINER --format '{{json .State}}'
docker logs --since 20m --tail 200 CONTAINER
docker stats --no-stream CONTAINER
```
示例占位符需替换为自己的环境。涉及生产服务时先保留备份,阅读命令用途后再执行。
## 参考资料
- [官方说明](https://docs.docker.com/engine/containers/start-containers-automatically/)
- [专题阅读路线](/topics/)