如何在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
相关产品推荐
相关产品推荐

