Docker run -e传递环境变量未按预期生效问题排查
问题原因
核心问题在于shell变量的展开时机:
- 你输入的
$ONE会被本地终端的shell优先解析,而非容器内部的shell。如果本地shell中未定义ONE环境变量,$ONE会被展开为空字符串。 - 最终Docker实际执行的命令是
docker run --rm -e ONE='1' alpine echo,容器内的echo命令没有收到参数,因此不会输出预期的"1"。
解决方法
要让变量在容器内部的shell中被解析,常用两种方式:
- 用
sh -c启动容器内的shell,并用单引号包裹命令,避免本地shell解析变量:docker run --rm -e ONE='1' alpine sh -c 'echo $ONE' - 转义
$符号,阻止本地shell展开变量(建议搭配sh -c使用,确保容器内shell处理变量):docker run --rm -e ONE='1' alpine sh -c "echo \$ONE"
内容的提问来源于stack exchange,提问作者Chris G.
相关产品推荐
相关产品推荐

