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

Docker Compose+GitHub Actions:测试完成后无法执行down命令

解决GitHub Actions中Docker Compose测试后容器卡住的问题

方案1:使用--abort-on-container-exit参数

直接在docker-compose up命令后添加该参数,它会在任意容器退出时自动终止所有关联容器。当webapp容器测试完成以0码退出后,MongoDB和Redis容器会被自动停止,GitHub Actions的「Build Docker Containers」步骤就能正常结束,顺利进入后续的docker-compose down步骤。

示例GitHub Actions步骤配置:

steps:
  - name: 构建并运行测试
    run: docker-compose up --build --abort-on-container-exit webapp

  - name: 清理容器
    run: docker-compose down

方案2:后台启动容器+等待测试完成

先后台启动所有容器,再用docker wait命令等待webapp容器执行完毕,之后执行停止命令。这种方式灵活性更高,适合需要在测试前后做额外操作的场景。

示例GitHub Actions步骤配置:

steps:
  - name: 后台启动容器
    run: docker-compose up -d --build

  - name: 等待测试完成
    run: docker wait your-webapp-service-name

  - name: 清理容器
    run: docker-compose down

注意将your-webapp-service-name替换为你docker-compose.yml中webapp服务的名称。

方案3:修改测试命令主动触发停止

如果可以调整npm run test-docker命令,可在测试完成后添加停止容器的逻辑,比如在package.json的scripts中修改为:

"test-docker": "npm run test && docker-compose down"

不过这种方式需要容器内进程能访问宿主环境的docker命令(通常需要挂载docker socket),存在一定安全风险,优先推荐前两个方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:29:56