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

