首页/云/Docker 容器速查/脚本批量读取退出码
容器排障52 条

脚本批量读取退出码

批量拿退出码的两个姿势:docker wait 同步等待返回码、inspect 事后读取 ExitCode;配合循环可给一批任务出结果表。

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

批量读取退出码的两种姿势

docker wait 阻塞等待容器退出并返回退出码,适合同步编排;docker inspect 读取已退出容器的 State.ExitCode,适合事后审计。两者配合循环可以给一批任务出结果表,是批处理与巡检脚本的常用组合。

基本信息

docker wait阻塞直到容器退出并输出退出码
docker inspect读取 State.ExitCode 等状态字段
docker eventsdie 事件里带退出码属性,适合实时观察
适用场景批处理编排、批量巡检、结果汇总
注意wait 只对已存在的容器有效

典型使用场景

  • 批处理流水线:等一批任务结束再统一判断成败
  • 巡检脚本:批量输出容器名与退出码的对照表
  • 事故复盘:事后读取历史容器的退出码
  • CI 里判断某个一次性任务是否成功
  • 实时观察:订阅 die 事件,任务一结束就记录结果

等待与批量汇总

等待与批量汇总
docker run -d --name job1 app/batch:1.0
docker wait job1                                  # 阻塞等待并输出退出码
for c in $(docker ps -aq --filter name=job); do
  echo "$c $(docker inspect -f '{{.State.ExitCode}}' $c)"   # 批量读取退出码
done
docker events --filter event=die \
  --format '{{.Actor.Attributes.name}} {{.Actor.Attributes.exitCode}}'   # 实时观察

三种取数方式

方式适用时机返回内容
docker wait同步等待任务结束退出码
docker inspect事后或批量查询ExitCode 与状态字段
docker events实时观察die 事件及退出码属性
docker ps 过滤批量定位容器容器标识与状态
批量巡检脚本建议输出容器名、退出码与结束时间三个字段,方便与日志时间线对齐。
wait 只对已存在的容器有效,容器名写错会立刻报错而不是等待,脚本里要先校验容器是否存在。
events 的历史窗口有限,很久以前的退出要用 inspect 或集中日志回溯,别指望事件流能翻历史。
退出码只能说明进程怎么结束,具体原因还要结合容器日志;脚本里把两者一起采集,排障时更省事。
容器被删除后 inspect 就查不到了,需要长期留存的退出码要落盘或写入日志系统。
对一批容器做汇总时,要先过滤出已退出的容器再读取退出码:仍在运行的容器该字段没有实际意义,混进结果里会干扰判断。

易错点

  • wait 只对已存在的容器有效,容器名写错会立即报错而不是等待,脚本要先校验
  • events 的历史窗口有限,很久以前的退出要用 inspect 或集中日志回溯
  • 退出码只能说明结束方式,不把日志一起采集,排障时仍要来回翻记录
  • 只记录退出码不留结束时间,结果与日志时间线对不上

数据来源与参考

  • Docker 官方 CLI 参考:docker wait、docker inspect、docker events(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌