如何将Windows PowerShell环境变量传入Docker镜像内的PowerShell脚本?
Windows PowerShell环境变量传递到Docker容器的正确方法
问题根源
你之前的两种命令都存在PowerShell变量解析或Docker参数格式的问题,导致环境变量没有正确传递:
- 第一种命令
-e $env:MY_VAR=$env:MY_VAR会被PowerShell展开为-e test=test,相当于给容器传递了一个名为test、值为test的环境变量,完全不符合预期。 - 第二种命令
-e MY_VAR=$env:MY_VAR未用引号包裹,PowerShell的参数解析逻辑会破坏键值对结构,Docker无法识别正确的变量名和值。
正确语法
有两种可行的方式:
方式一:引号包裹键值对
用双引号包裹每个-e参数,让PowerShell先展开环境变量值,再传递完整的键值对给Docker:
docker run -t my-image:latest -e "MY_VAR=$env:MY_VAR" -e "MY_VAR2=$env:MY_VAR2"
方式二:直接传递变量名
如果容器内需要的变量名和当前PowerShell中定义的变量名一致,可以直接指定变量名,Docker会自动读取当前shell的环境变量值:
docker run -t my-image:latest -e MY_VAR -e MY_VAR2
验证
运行上述正确命令后,容器内的run.ps1脚本会输出:
test test2
同时gci env:*的结果里也能看到MY_VAR和MY_VAR2这两个环境变量。
内容的提问来源于stack exchange,提问作者fandro
相关产品推荐
相关产品推荐

