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

如何通过Docker Compose用对应目录Git分支名标记镜像

实现Docker Compose自动用Git分支名作为镜像标签

核心思路

Docker Compose本身不支持在配置文件中直接执行外部命令并动态赋值,但可以通过环境变量传递+shell脚本封装的方式,实现仅通过类似docker compose build service2的命令触发自动标记流程。

具体实现步骤

1. 修改Docker Compose配置文件

将每个服务的image字段改为使用环境变量占位,示例如下:

services:
  isagog-kg2:
    build:
      context: /home/mema/code/kg2/isagog-ai-kg2
    image: isagog-kg2:${KG2_BRANCH}

  service-2:
    build:
      context: /home/mema/code/service2
    image: service2:${SERVICE2_BRANCH}

2. 编写封装脚本(命名为compose-build.sh)

这个脚本会接收服务名作为参数,自动定位对应服务的context目录,获取Git分支名后传递环境变量给Docker Compose:

#!/bin/bash

# 检查是否传入服务名参数
if [ $# -eq 0 ]; then
    echo "请指定要构建的服务名,例如:./compose-build.sh service-2"
    exit 1
fi

SERVICE_NAME=$1

# 从docker-compose.yml中提取对应服务的context目录
CONTEXT=$(docker compose config --services | grep -w "$SERVICE_NAME" | xargs docker compose config --service "$SERVICE_NAME" | yq '.build.context')

# 检查是否成功获取到context目录
if [ -z "$CONTEXT" ]; then
    echo "无法找到服务$SERVICE_NAME的context目录"
    exit 1
fi

# 进入context目录获取Git分支名
BRANCH_NAME=$(cd "$CONTEXT" && git rev-parse --abbrev-ref HEAD)

# 根据服务名设置对应的环境变量
case $SERVICE_NAME in
    isagog-kg2)
        export KG2_BRANCH=$BRANCH_NAME
        ;;
    service-2)
        export SERVICE2_BRANCH=$BRANCH_NAME
        ;;
    *)
        echo "不支持的服务名:$SERVICE_NAME"
        exit 1
        ;;
esac

# 执行Docker Compose构建命令
docker compose build "$SERVICE_NAME"

3. 配置脚本权限并使用

给脚本添加执行权限:

chmod +x compose-build.sh

之后执行以下命令即可自动构建并标记镜像:

# 构建isagog-kg2服务
./compose-build.sh isagog-kg2

# 构建service-2服务
./compose-build.sh service-2

4. 可选:简化命令(设置别名)

如果觉得脚本名过长,可在~/.bashrc或~/.zshrc中添加别名:

alias compose-build='./path/to/compose-build.sh'

之后直接使用:

compose-build service-2

注意事项

  • 确保每个服务的context目录是Git仓库,否则git rev-parse命令会报错
  • 脚本依赖yq工具解析YAML文件,可通过包管理器安装(如apt install yq或brew install yq)
  • 若需同时构建多个服务,可修改脚本支持多参数,注意每个服务的环境变量需单独设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:17:41