Docker中Choco命令使用ARG变量指定版本报错求助
Docker中使用ARG变量指定Chocolatey安装azure-cli版本的问题修复
问题现象
在Dockerfile中通过ARG变量传递azure-cli版本给Chocolatey时,出现报错:
'--no-progress' is not a valid version string.
报错的Dockerfile片段:
ARG azurecli_version="2.43.0" RUN powershell choco feature enable -n allowGlobalConfirmation; choco install azure-cli --version ${azurecli_version} --no-progress
硬编码版本值时命令可正常运行:
RUN powershell choco feature enable -n allowGlobalConfirmation; choco install azure-cli --version 2.43.0 --no-progress
问题原因
PowerShell会优先解析${azurecli_version}语法,但该变量在PowerShell运行环境中未定义,被替换为空字符串。最终传递给Chocolatey的命令变为:
choco install azure-cli --version --no-progress
Chocolatey将后续的--no-progress识别为版本参数的值,导致版本格式校验失败。
解决方案
方案1:将ARG转为环境变量后引用
把ARG变量赋值给ENV,在PowerShell中用$env:前缀引用环境变量:
ARG azurecli_version=2.43.0 ENV azurecli_version=${azurecli_version} RUN powershell choco feature enable -n allowGlobalConfirmation; choco install azure-cli --version $env:azurecli_version --no-progress
方案2:使用RUN的exec格式命令
通过exec格式让Docker先完成变量替换,再传递给PowerShell执行:
ARG azurecli_version="2.43.0" RUN ["powershell", "-Command", "choco feature enable -n allowGlobalConfirmation; choco install azure-cli --version ${azurecli_version} --no-progress"]
方案3:简化ARG定义并转义变量
去掉ARG变量的引号,同时用反引号转义变量语法,避免PowerShell提前解析:
ARG azurecli_version=2.43.0 RUN powershell choco feature enable -n allowGlobalConfirmation; choco install azure-cli --version `${azurecli_version} --no-progress
内容的提问来源于stack exchange,提问作者Leroy Luff
相关产品推荐
相关产品推荐

