记录一下那天晚上的排查过程。容器刚起来就变成退出状态,查看日志没有任何输出,重启策略一直拉起又退出。
排查方向其实有限,先把可能性排一排。启动命令不是前台进程,执行完立刻结束。也可能是入口脚本报错但输出被重定向丢掉了。
还有一种情况,依赖的服务还没就绪,程序主动退出。
上来先看退出码和最后一次状态
docker inspect -f '{{.State.ExitCode}}' 容器名
接着换成交互方式进容器排查
docker run -it --entrypoint /bin/sh 镜像名
再往下确认启动命令是前台运行
docker inspect -f '{{.Config.Cmd}}' 容器名
末了核对依赖服务的连通性
docker logs --tail 50 容器名
这台环境是别人交接的,不少默认值被动过,只能一项项核。
别只看报错消失,验证要多做一步。容器稳定处于运行状态,日志能看到应用启动完成的信息。
这里还有个坑。守护进程模式在容器里会立刻退出,必须前台运行;启动脚本里的错误重定向也会让日志彻底消失。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。