docker wait用于阻塞等待容器停止并返回退出码:0表示正常退出,非零值表示异常;支持单个或多个容器,按输入顺序输出各退出码,常用于脚本同步、ci/cd流程控制及顺序执行场景。

用 docker wait 阻塞等待容器退出并获取状态,核心就是让当前进程停在那儿,直到目标容器真正停止运行,然后直接拿到它的退出码——这个数字就是判断任务成败的关键依据。
什么时候该用 docker wait
它不是用来“监控”或“轮询”的,而是专为同步控制设计的。典型场景包括:
- 脚本中启动一个批处理容器(比如数据清洗、日志归档),必须等它跑完才能触发下一步(如发送通知、上传结果)
- CI/CD 流水线里运行测试容器,需要根据退出码决定是否标记构建失败
- 多个依赖容器需按顺序执行,前一个没结束,后一个不能启动
基本用法与返回值含义
命令格式简洁:docker wait 。容器一停止,终端立刻输出一个整数,例如:
5
这个数字就是容器主进程的 exit code:
-
0:正常完成(比如
bash -c "echo done; exit 0") -
非零值:异常退出(比如
exit 1表示通用错误,exit 127常见于命令未找到)
注意:wait 不会输出日志、不显示容器状态变化,只返回退出码;如果容器已停止或根本不存在,命令立即报错,不会等待。
一次等多个容器
支持空格分隔多个目标,命令会阻塞到所有指定容器都停止,再按输入顺序依次输出退出码:
docker wait job-a job-b job-c
输出类似:0 2 0
这意味着 job-a 和 job-c 成功,job-b 执行出错。你可以用 shell 变量捕获这些值做条件判断,比如检查是否有非零值来中断流程。
配合其他命令提升实用性
单独 wait 获取不到运行过程信息,常需组合使用:
- 启动时加 --rm,避免退出后残留容器,让 wait 更干净
- 用 docker logs -f 在另一终端实时看输出,和 wait 配合调试逻辑
- 在脚本中用 $? 捕获 wait 的执行结果(注意:这是 wait 命令自身的成功与否,不是容器退出码;容器退出码是 stdout 输出内容)
例如 Bash 中提取第一个容器退出码:
exit_code=$(docker wait my-job)











