You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让docker-compose等待指定容器全部执行成功后返回正确退出码?

docker compose的--exit-code-from仅支持指定单个参考服务,无法同时监听多个服务的退出状态,所以你之前的尝试无法达到预期效果,有两种常用实现方案:

方案一:新增专用等待服务(无额外脚本,依赖compose原生能力)

修改你的docker-compose.yml,新增一个专门的等待服务,只有client和tests都执行成功时该服务才会启动:

version: "3.9"
services:
  tests:
    image: tests
    tty: true
    depends_on:
        - "server"
    links:
      - "server:srv"
  client:
    image: client
    tty: true
    depends_on:
        - "server"
    links:
      - "server:srv"
  server:
    image: server
    tty: true
    ports:
      - "8081:80"
  # 新增等待服务
  all-jobs-done:
    image: busybox:latest
    depends_on:
      client:
        condition: service_completed_successfully
      tests:
        condition: service_completed_successfully
    command: "echo All jobs finished successfully"

执行以下命令即可达到需求:

docker-compose -f docker/docker-compose.yml up --exit-code-from all-jobs-done --abort-on-container-exit
  • --exit-code-from all-jobs-done:最终返回码和等待服务的退出码保持一致
  • --abort-on-container-exit:任意容器退出就停止整个compose集群:如果client/tests任意一个执行失败,等待服务不会启动,失败容器退出时会触发集群停止并返回非0错误码;如果两个任务都执行成功,等待服务启动后快速退出,触发集群停止并返回0状态码。

方案二:无需修改compose配置,用shell脚本包装执行

编写执行脚本run.sh如下:

#!/bin/bash
# 后台启动所有服务
docker-compose -f docker/docker-compose.yml up -d

# 等待client执行完成,获取退出码
CLIENT_ID=$(docker-compose -f docker/docker-compose.yml ps -q client)
CLIENT_EXIT=$(docker wait $CLIENT_ID)
echo "Client exit code: $CLIENT_EXIT"

# 等待tests执行完成,获取退出码
TEST_ID=$(docker-compose -f docker/docker-compose.yml ps -q tests)
TEST_EXIT=$(docker wait $TEST_ID)
echo "Tests exit code: $TEST_EXIT"

# 停止所有服务清理资源
docker-compose -f docker/docker-compose.yml down -v

# 两个任务都成功才返回0
if [ $CLIENT_EXIT -eq 0 ] && [ $TEST_EXIT -eq 0 ]; then
    echo "All jobs succeeded"
    exit 0
else
    echo "Some jobs failed"
    exit 1
fi

给脚本添加执行权限后直接运行即可:

chmod +x run.sh
./run.sh

内容的提问来源于stack exchange,提问作者Adam Matan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:24:03