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

如何让Docker Compose构建阶段等待其他服务启动后执行?

如何让Docker Compose的build步骤等待其他服务启动后再执行?

在Docker Compose里调整容器启动顺序有不少方案,比如:

  • depends_on
  • docker-compose-wait
  • 相关讨论:《Docker Compose wait for container X before starting Y》(提问于7年6个月前,7个月前修改,浏览量48.3万次)
  • ……

但如果某个服务在docker-compose.yml里包含build指令,Docker Compose会优先尝试构建镜像,本质上会忽略depends_on(或者说把它当成容器启动依赖而非镜像构建依赖)。

那有没有办法让build指令等待其他服务启动后,再开始构建流程?

最小示例:

version: "3.5"
services:
  web:
    build: # 此步骤会在postgres启动前执行
      context: .
      dockerfile: Dockerfile.setup # 需要postgres处于启动状态
    depends_on:
      - postgres
    ...
  postgres:
    image: postgres:10
    ...

尽管常规建议程序应能优雅处理服务暂时不可用的情况,但还是想知道:是否存在方法让构建仅在其他容器启动后开始?

相关问题:

  • 《multi-stage build in docker compose?》

解决方案

把所有数据库配置操作移到容器启动时的CMD指令中即可解决问题:

FROM undertest-base:latest

...

CMD ./wait && ./bootstrap.sh

其中wait用于等待postgres启动,bootstrap.sh包含postgres数据库初始化及数据填充代码,执行完成后整个系统即可用于测试。通过这个方案,只需执行docker-compose up就能搭建包含数据库配置的临时测试环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:36:29