首页/云/Docker 容器速查/docker wait 等待容器结束
基础命令50 条

docker wait 等待容器结束

阻塞等待指定容器退出并打印其退出码,脚本编排里用来同步等待一次性任务完成。

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

docker wait 是什么

wait 会阻塞当前终端直到指定容器退出,然后把容器的退出码打印出来。它的用途是把「容器什么时候跑完」变成脚本里可判断的一步:启动一个一次性任务容器,等它结束并拿到结果码,再决定后续流程。与之搭配的是后台启动(-d)与日志查看,构成脚本化编排的常用组合。

基本信息

语法docker wait 容器 [更多容器…]
输出容器退出码,多个容器时按顺序逐行打印
阻塞行为容器不退出就一直等待,直到超时或人为中断
典型组合docker run -d 启动,docker wait 等待,docker logs 看输出
与 --rm 冲突容器被自动删除后无法再取到退出码
适用平台所有 Docker 环境;编排平台有自己的作业等待机制

典型使用场景

  • 脚本里串行执行多个一次性任务:前一个完成后再启动下一个
  • 数据迁移与初始化:等待容器结束并检查返回码决定是否继续
  • 备份任务的编排:等待打包容器退出后再上传产物
  • CI 中执行容器化测试,用退出码判断用例是否通过
  • 排查偶发失败:多次运行并记录退出码分布

脚本化等待

脚本化等待
# 后台启动任务容器(注意不要加 --rm,否则退出后无法读退出码)
docker run -d --name job app/batch:1.0

# 阻塞等待并拿到退出码
exit_code=$(docker wait job)
echo "容器退出码: ${exit_code}"

# 失败时打印日志尾部,便于定位
docker logs --tail 50 job

# 用完手动清理容器
docker rm -f job

# 超时兜底:等待过久就人工终止,避免脚本永久挂住
# timeout 1800 bash -c 'docker wait job' || echo '等待超时'

退出码后续动作

退出码含义脚本处理建议
0任务正常完成继续后续步骤
1应用自身失败打印日志并中断流程
137被强制终止(常见内存超限)检查内存与限额后重试
143收到终止信号确认是否为人为停止
125Docker 层参数或守护进程问题检查启动命令与环境
不要在服务型容器上使用 wait:常驻进程不会退出,命令会一直阻塞,脚本里应加超时保护或改用健康检查判断就绪。
使用 --rm 的短命容器可能在 wait 取到结果前就被删除,需要退出码时不要加该参数,改为事后手动清理。

易错点

  • 对永不退出的服务容器执行 wait 会一直阻塞,脚本缺少超时兜底就会永久挂住
  • 配合 --rm 使用时容器可能先被删除,等待命令拿不到退出码甚至直接报错
  • 忘记清理等待过的容器,长期积累大量已退出实例,占用磁盘与名字空间
  • 把退出码当作唯一判据:任务退出 0 但业务失败的情况需要结合日志与产物校验

数据来源与参考

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