如何让Docker Compose构建阶段等待其他服务启动后执行?
如何让Docker Compose的build步骤等待其他服务启动后再执行?
在Docker Compose里调整容器启动顺序有不少方案,比如:
depends_ondocker-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
相关产品推荐
相关产品推荐

