记录一下那天晚上的排查过程。容器刚起来就变成退出状态,查看日志没有任何输出,重启策略一直拉起又退出。

排查方向其实有限,先把可能性排一排。启动命令不是前台进程,执行完立刻结束。也可能是入口脚本报错但输出被重定向丢掉了。

还有一种情况,依赖的服务还没就绪,程序主动退出。

上来先看退出码和最后一次状态

docker inspect -f '{{.State.ExitCode}}' 容器名

接着换成交互方式进容器排查

docker run -it --entrypoint /bin/sh 镜像名

再往下确认启动命令是前台运行

docker inspect -f '{{.Config.Cmd}}' 容器名

末了核对依赖服务的连通性

docker logs --tail 50 容器名

这台环境是别人交接的,不少默认值被动过,只能一项项核。

别只看报错消失,验证要多做一步。容器稳定处于运行状态,日志能看到应用启动完成的信息。

这里还有个坑。守护进程模式在容器里会立刻退出,必须前台运行;启动脚本里的错误重定向也会让日志彻底消失。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189