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

如何从Shell脚本覆盖Docker Compose中的变量值?

实现Shell脚本覆盖Docker Compose变量的方法

要让Shell脚本里的变量值替换Docker Compose文件中的占位符,有几种简单直接的方式:

方法1:执行命令前导出环境变量

Docker Compose(包括docker stack deploy解析Compose文件时)会自动读取当前环境中的变量来替换文件里的$VAR占位符。你只需要在脚本里把变量导出,再执行部署命令即可:

修改你的test.sh脚本:

# 设置变量并导出
export HOME=$(pwd)
export WORKSPACE=/tmp/
export BUILD_IMAGE=someimage
# 注意:你的Compose文件里还有$WORKING_DIR变量,必须补上对应值
export WORKING_DIR=/tmp/

# 执行部署
docker stack deploy --compose-file compose.yml test

也可以直接在命令行前一次性传递变量,不用单独导出:

HOME=$(pwd) WORKSPACE=/tmp/ BUILD_IMAGE=someimage WORKING_DIR=/tmp/ docker stack deploy --compose-file compose.yml test

方法2:使用.env文件

如果变量较多,你可以在脚本里生成一个.env文件,Docker Compose会自动加载当前目录下的这个文件:

修改test.sh:

# 生成.env文件
cat > .env <<EOF
HOME=$(pwd)
WORKSPACE=/tmp/
BUILD_IMAGE=someimage
WORKING_DIR=/tmp/
EOF

# 执行部署
docker stack deploy --compose-file compose.yml test

注意事项

  • 你的Compose文件中用到了$WORKING_DIR,但原脚本里没设置这个变量,必须补充对应值,否则会导致部署失败。
  • Compose文件里的变量建议写成${VAR}格式(比如${WORKSPACE}),能避免和其他字符产生歧义,不过$VAR格式也能正常解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:12:05