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

Dockerfile中ARG变量无法展开的问题求助

解决Docker构建dotnet应用时ARG/ENV变量未展开的问题

核心原因

Windows 11下Docker Desktop默认可能使用Windows容器模式,此时RUN命令调用的是Windows cmd shell,变量展开语法为%变量名%,而非Linux shell的${变量名}或$变量名,这会导致变量被当作字面量传递给编译器,触发MSB3052错误。

解决方案

方案1:切换到Linux容器模式(推荐)

这是dotnet应用容器化的通用做法,操作步骤:

  • 右键点击任务栏的Docker Desktop图标,选择Settings
  • 在General选项卡中勾选Use the WSL 2 based engine,重启Docker
  • 若已开启WSL 2,也可直接在Docker Desktop的Troubleshoot菜单中切换到Linux容器

切换完成后,原Dockerfile中的${BUILD_CONFIGURATION}语法即可正常展开,无需修改代码。

方案2:适配Windows容器的变量语法

若必须使用Windows容器,将RUN命令中的变量语法改为Windows cmd格式:

#Copy source code into container
WORKDIR /src
COPY . .    
#Build application
ARG BUILD_CONFIGURATION=Release
RUN dotnet build "MyProject/MyProject.csproj" -c %BUILD_CONFIGURATION% -o /bin

用%BUILD_CONFIGURATION%替代${BUILD_CONFIGURATION},就能让Windows cmd正确识别并展开变量。

额外注意事项

  • 若使用ENV变量,在Windows容器中同样需要用%变量名%语法
  • 确保指定的dotnet基础镜像与容器模式匹配(Linux镜像对应Linux容器,Windows镜像对应Windows容器)

内容的提问来源于stack exchange,提问作者Master_T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:47:05