docker-compose并行构建时如何先执行命令再构建指定服务镜像
实现方法
docker compose 本身不支持构建阶段的任务依赖调度,结合shell的后台任务等待机制即可实现你的需求,操作步骤如下:
- 步骤1:在项目根目录创建构建脚本
build.sh,内容如下(请替换脚本中的自定义命令为你实际要执行的命令):
#!/bin/bash # 后台启动service1构建,记录进程ID docker-compose build service1 & SERVICE1_BUILD_PID=$! # 同步执行自定义命令 echo "执行自定义命令中..." # 下方替换为你的实际自定义命令,例如 sh ./your-script.sh your-custom-command CUSTOM_CMD_EXIT_CODE=$? # 等待service1构建完成 wait $SERVICE1_BUILD_PID SERVICE1_EXIT_CODE=$? # 校验前置任务执行状态,任一失败则终止后续构建 if [ $SERVICE1_EXIT_CODE -ne 0 ] || [ $CUSTOM_CMD_EXIT_CODE -ne 0 ]; then echo "前置任务执行失败,已终止构建流程" exit 1 fi # 前置任务全部完成后,并行构建service2、service3 docker-compose build --parallel service2 service3
- 步骤2:给脚本添加执行权限:
chmod +x build.sh - 步骤3:执行脚本即可完成符合要求的构建:
./build.sh
可选方案:使用Makefile调度
如果你习惯用Makefile管理构建流程,也可以编写如下Makefile:
.PHONY: all pre-build build-service1 custom-cmd build-post all: pre-build build-post # 并行执行service1构建和自定义命令 pre-build: make -j2 build-service1 custom-cmd build-service1: docker-compose build service1 custom-cmd: # 替换为你的实际自定义命令 your-custom-command # 并行构建后续服务 build-post: docker-compose build --parallel service2 service3
执行make即可触发整个构建流程。
内容的提问来源于stack exchange,提问作者Yakir GIladi Edry
相关产品推荐
相关产品推荐

