Docker Compose环境变量TEST=*被容器根目录列表替换问题求助
解决Docker Compose中环境变量
*被shell展开的问题 问题根源
- Docker Compose层面:使用数组形式
environment: - TEST=*时,Compose会通过指定的/bin/sh解析变量,shell会把*当作通配符展开成当前目录的文件列表。 - 脚本执行层面:即便环境变量正确设置为
*,run.sh里的echo TEST: ${TEST}未用引号包裹变量,shell执行时会再次将*展开成文件列表。
解决方案
需同时修改Compose配置与脚本,确保*被当作字面量传递和输出:
1. 调整Docker Compose的环境变量配置
使用键值对形式的environment配置,这种方式下Compose会直接设置环境变量,不会经过shell解析:
command: /run.sh entrypoint: /bin/sh environment: TEST: "*"
若坚持使用数组形式,需用YAML的单引号包裹值(属于YAML层面的字面量声明),确保Compose将*原样传递:
environment: - TEST:'*'
2. 修改run.sh脚本的变量引用
给变量添加双引号,避免shell执行脚本时再次展开通配符:
echo TEST: "${TEST}"
验证结果
执行后会正确输出:
TEST: *
内容的提问来源于stack exchange,提问作者David Parks
相关产品推荐
相关产品推荐

