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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:05:26