容器真实运行状态需交叉验证:先看 docker ps 的 status 列(含 healthy/starting/unhealthy 状态),再用 docker inspect 查 health.status、failingstreak 和 log;同时确认 state.running 为 true、exitcode 为 0、pid 非 0,并检查网络 ip、端口映射及内部监听。

容器运行状态检查不能只看是否显示 Up,关键要看它是否真正可用。最直接的方式是结合 docker ps 的 STATUS 列和 docker inspect 的健康日志来交叉验证。
快速判断:用 docker ps 看 STATUS 列
执行 docker ps 时,STATUS 列会显示类似这样的内容:
- Up 2 minutes (healthy) → 容器运行中,且健康检查通过
- Up 5 seconds (starting) → 刚启动,处于宽限期,尚未开始健康检查
- Up 3 minutes (unhealthy) → 健康检查连续失败,已触发阈值
- Up 10 minutes(无括号)→ 容器未配置 HEALTHCHECK,只说明进程在跑
确认真实健康度:查 HEALTHCHECK 详细结果
运行以下命令获取结构化健康信息:
docker inspect --format='{{json .State.Health}}' <container-name-or-id></container-name-or-id>
重点关注三个字段:
-
Status:当前总体状态(
healthy/unhealthy/starting) - FailingStreak:连续失败次数,归零即恢复健康
-
Log:最近几次检查的起止时间、
ExitCode和输出内容,可用来定位失败原因(比如ExitCode为 1 表示检查脚本执行失败)
验证容器是否真在运行(非健康检查维度)
有时容器进程已退出,但 STATUS 仍显示 Up(尤其在 restart policy 下),需进一步确认:
- 查主进程是否存活:
docker inspect --format='{{.State.Running}}' <name></name>,返回true才算进程在跑 - 查退出码:
docker inspect --format='{{.State.ExitCode}}' <name></name>,非 0 值说明主程序异常终止过 - 查 PID:
docker inspect --format='{{.State.Pid}}' <name></name>,为 0 表示当前无主进程
辅助排查:网络与端口是否就绪
服务“运行中”不等于“能访问”,还需确认监听配置是否生效:
- 查容器 IP:
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <name></name> - 查端口映射:
docker inspect --format='{{.NetworkSettings.Ports}}' <name></name> - 进容器内部验证服务端口是否监听:
docker exec <name> netstat -tuln | grep :80</name>











