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

Docker Compose环境变量TEST=*被容器根目录列表替换问题求助

解决Docker Compose中环境变量*被shell展开的问题

问题根源

  1. Docker Compose层面:使用数组形式environment: - TEST=*时,Compose会通过指定的/bin/sh解析变量,shell会把*当作通配符展开成当前目录的文件列表。
  2. 脚本执行层面:即便环境变量正确设置为*,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:03:21