Dockerfile 中的 ARG 变量未展开

问题描述 投票:0回答:1

我对

Docker
很陌生(这是我在阅读了一些教程后第一次尝试),并且我陷入了一些看起来很简单的事情。

我的

Dockerfile
中有这行应该构建一个dotnet应用程序,正如你所看到的,我有一个
ARG
,我在其中定义构建配置,然后在下一行中将其传递给编译器:

ARG BUILD_CONFIGURATION=Release
RUN dotnet build "MyProject/MyProject.csproj" -c ${BUILD_CONFIGURATION} -o /bin

但是问题是,在构建 Docker 映像时,

${BUILD_CONFIGURATION}
arg 不会扩展,而是按字面形式传递,因此实际调用的构建命令是字面意思:

dotnet build "MyProject/MyProject.csproj" -c ${BUILD_CONFIGURATION} -o /bin

显然编译器不喜欢这样并给了我错误:

MSB3052:编译器的参数无效, '/define:${BUILD_CONFIGURATION}' 将被忽略。

为什么这不起作用?我错过了什么?

注意:我也尝试过不带花括号的

$BUILD_CONFIGURATION
,也尝试过使用
ENV
代替
ARG
,但结果是相同的。

编辑:如果需要一些进一步的信息

  • 我在 Windows 11 上使用 Docker Desktop
  • 我使用命令
    docker build .
  • 从 Windows 终端调用构建过程
  • 这是完整的 dockerfile(如果有帮助的话):

Dockerfile

#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
docker .net-core dockerfile
1个回答
0
投票

我尝试使用 linux alpine 基本映像来完成您的示例,但对我来说,它在控制台中打印运行时的变量

docker build .

这是 Dockerfile:

FROM alpine
#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

这是输出:

....
 => [2/4] WORKDIR /src                                                                                     0.1s
 => [3/4] COPY . .                                                                                         0.3s
 => ERROR [4/4] RUN dotnet build "MyProject/MyProject.csproj" -c Release -o /bin                           0.3s
------                                                                                                          
 > [4/4] RUN dotnet build "MyProject/MyProject.csproj" -c Release -o /bin:
0.323 /bin/sh: dotnet: not found
...

虽然输出错误,但至少它打印了

Release
作为日志的一部分,这证明它适用于linux基础映像...

编辑

由于您使用的是基于 Windows 的基础映像,因此使用

%%
而不是
$
符号来评估环境变量。因此,您可以修改运行命令以使其正常工作:

dotnet build "MyProject/MyProject.csproj" -c %BUILD_CONFIGURATION% -o /bin
© www.soinside.com 2019 - 2024. All rights reserved.