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

如何在docker-compose.yaml中用主机命令输出设置环境变量?

Docker Compose 环境变量设为主机命令输出的解决方法

直接在docker-compose.yaml里写VERSION=$(git describe)行不通,因为Docker Compose不会解析环境变量里的shell命令,只会把这段字符串原样传给容器。下面给几种实用的解决办法:

方法1:启动前通过Shell传递变量

在启动Compose时,先在主机上执行命令拿到结果,再通过环境变量传给Compose:

首先修改docker-compose.yaml:

name: myservice
services:
  agent:
    image: ubuntu
    user: root
    restart: always
    environment:
      - VERSION=${VERSION}

然后在终端里执行:

VERSION=$(git describe) docker-compose up -d

这样容器里的VERSION变量就会是git describe的输出结果。

方法2:用.env文件传递变量

先在主机上生成包含变量的.env文件:

echo "VERSION=$(git describe)" > .env

保持docker-compose.yaml和上面一致(甚至可以省略environment里的VERSION,因为Compose会自动加载.env里的变量到容器):

name: myservice
services:
  agent:
    image: ubuntu
    user: root
    restart: always
    environment:
      - VERSION=${VERSION}

直接启动Compose即可:

docker-compose up -d

为什么原方法失效?

Docker Compose本身不支持在environment字段里执行主机的shell命令替换,它会把$(git describe)当作普通字符串值,所以容器里的VERSION变量会是这段字符串,而非命令执行后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:28:09