首页/云/云与容器速查/容器启动失败排查五步

容器启动失败排查五步

容器起不来按固定顺序走:看状态 → 看日志 → inspect 配置 → 校验 entrypoint/cmd → 手动换 shell 验证。先复现最小现场,再谈改配置。

云与容器速查云更新于 2026-10-13

容器启动失败怎么查

容器起不来时不要凭感觉改配置,按固定顺序走一遍:先看状态与退出码,再看日志,然后用 inspect 核对实际生效的配置,接着验证入口命令与参数,最后对齐宿主环境。顺序的意义在于每一步都能排除一类原因,避免在错误的方向上反复试错。

基本信息

第 1 步docker ps -a 看容器状态与退出码
第 2 步docker logs 容器 --tail=200 看启动输出
第 3 步docker inspect 看 Config、State 与 Mounts 是否符合预期
第 4 步用 --entrypoint sh 或覆盖 command 手动进镜像验证环境
第 5 步对齐宿主侧条件:端口占用、路径权限、资源限制、内核版本

常见退出码含义

  • 退出码 0 后立即结束:容器的主进程跑完就退出,通常缺前台运行参数
  • 退出码 1:应用自身启动报错,去看日志首屏的异常栈
  • 退出码 126 或 127:入口脚本不可执行或命令不存在,检查路径与执行权限
  • 退出码 137:被强制杀死,常见于内存超限或人工 kill
  • 退出码 139:段错误,通常是二进制与运行环境不匹配

排查命令组

排查命令组
docker ps -a | head                       # 看状态与退出码
docker logs myapp --tail=200              # 看应用输出,注意最前面的报错
docker inspect myapp | head -60           # 核对挂载、端口、入口与限额
# 绕开默认入口直接进镜像,验证命令是否存在、环境变量是否齐全
docker run --rm -it --entrypoint sh myapp:1.2.3
docker inspect myapp -f '{{.State.ExitCode}} {{.State.Error}}'   # 精确取退出码

症状与方向对照

症状常见原因下一步
启动即退出且无日志主进程不是前台运行检查启动命令是否带前台参数
报命令找不到入口路径写错或脚本不可执行核对路径与文件权限
报权限拒绝挂载目录属主或 SELinux 标签不符调整属主或加标签参数
日志空白但状态异常应用日志写到了文件而非标准输出改日志输出到标准输出
换机器就起不来架构不符或内核版本差异核对镜像架构与宿主内核
「同一镜像在 A 机器能跑、在 B 机器不能」重点查四项:镜像架构是否为当前 CPU 架构、挂载路径是否存在且权限正确、宿主内核版本是否满足要求、资源限制是否过紧。
排查前先用 docker images 核对标签,确认你调试的就是出问题的那一个:镜像标签被覆盖或指向旧版本时,所有排查结论都会跑偏。

易错点

  • 只看日志不看 inspect,挂载与入口配置错了,日志里根本没有线索
  • 在错误的镜像标签上调试,越查越糊涂
  • 应用日志写在容器内文件而非标准输出,docker logs 一片空白
  • 容器主进程不是前台运行,启动即退出还以为是崩溃

数据来源与参考

  • Docker Docs:Troubleshooting
  • Docker Docs:Start containers automatically

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌