最可靠的方式是 docker inspect --format='{{.State.Status}}';其次推荐 Docker 24.0+ 的 docker container is-running;docker ps 过滤仅适用于人工快速确认,不推荐关键逻辑;避免使用 docker top 判断状态。

直接用 docker inspect 提取容器状态字段,是最可靠、最常用于脚本判断的方式。
用 inspect + format 判断运行状态
执行命令可精确输出状态字符串(如 running 或 exited),适合在 Shell 脚本中做条件分支:
-
docker inspect --format='{{.State.Status}}' nginx-app→ 返回running或exited - 配合 if 语句使用:
if [[ $(docker inspect --format='{{.State.Status}}' nginx-app 2>/dev/null) == "running" ]]; then<br> echo "容器正在运行";<br>else<br> echo "容器未运行";<br>fi -
2>/dev/null可屏蔽容器不存在时的报错,避免脚本中断
用 ps 过滤检查是否在运行列表中
适用于快速人工确认或简单脚本,但不如 inspect 精准(例如容器刚退出可能短暂残留):
-
docker ps --filter "name=nginx-app" --format "{{.Status}}" | grep -q "Up"→ 成功则返回 0(表示运行中) - 注意:
docker ps默认只显示 running 容器,所以只要名字能匹配上,基本可认定为运行中 - 不推荐用于关键逻辑判断,因依赖字符串匹配(如
Up 2 minutes中的Up可能误匹配)
用 is-running 命令(Docker 24.0+ 新增)
较新版本 Docker(24.0 及以上)提供专用子命令,语义清晰、退出码规范:
docker container is-running nginx-app- 运行中:返回 0(成功),无输出
- 未运行或不存在:返回非 0,可结合
&&/||使用 - 需确认版本:
docker --version,低于 24.0 不支持该命令
补充:避免用 docker top 做状态判断
docker top 仅适用于已运行的容器,且失败时输出错误而非标准退出码,不适合条件判断:
- 容器停止时会报错
Error: No such container或空输出,不可靠 - 它设计目标是查进程,不是查状态;应交给
inspect或is-running


















