【发布时间】:2023-03-04 01:34:02
【问题描述】:
我正在尝试使用 Docker 构建我的 .net 核心应用程序。 我想在构建期间覆盖我的应用版本。在运行时稍后的某个地方显示它。
我的 Docker 文件如下所示:
FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /src
RUN apt-get update && \
apt-get install -y libgit2-dev && \
ln -s /usr/lib/x86_64-linux-gnu/libgit2.so /lib/x86_64-linux-gnu/libgit2-15e1193.so
COPY ..
WORKDIR /src/API
RUN dotnet restore
RUN dotnet tool install -g GitVersion.Tool --version=5.0.0-beta1-72
RUN export PATH="$PATH:/root/.dotnet/tools" && \
version="$(dotnet gitversion /output json /showvariable NuGetVersion)" && \
dotnet build --no-restore /property:Version=$version && \
dotnet publish --output "/app" --no-build
FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app .
ENTRYPOINT ["dotnet", "API.dll"]
当我在我的 Windows 机器上尝试 RUN 指令中的相同命令时,一切正常。我还尝试在 WSL (Ubuntu 18) 上运行相同的命令,这也很好 - 我的构建命令中有程序集版本。 但我不知道为什么它在 Docker 中不起作用。
我还尝试删除我所有的 GitVersion 魔法并使用这个:
FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /src
RUN apt-get update && \
apt-get install -y libgit2-dev && \
ln -s /usr/lib/x86_64-linux-gnu/libgit2.so /lib/x86_64-linux-gnu/libgit2-15e1193.so
COPY ..
WORKDIR /src/API
RUN dotnet restore
RUN dotnet build --no-restore /property:Version=1.1.1.0-beta1
RUN dotnet publish --output "/app" --no-build
FROM microsoft/dotnet:2.2-aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app .
ENTRYPOINT ["dotnet", "API.dll"]
反正我的结果是一样的。
我用这段代码来检查:
public static void Main(string[] args)
{
Console.WriteLine(typeof(Program).Assembly.GetName());
}
每次我的构建成功但我在 .csproj 文件中定义了没有覆盖的版本。
【问题讨论】:
-
你能比“不工作”更具体吗?您遇到了什么精确行为?
-
每次我的构建成功但我在 .csproj 文件中定义了没有覆盖的版本。
-
看起来预期的参数是
-p用于传递给 msbuild 的属性,而不是/property。这些处理可能在 linux 和 windows 命令行之间有所不同? -
我相信这里都允许。我刚刚在我的 dockerfile 中检查了 -p 并且得到了相同的结果。我在 MS 文档中使用了 \p 。如果存在不允许的标志,dotnet build 将引发错误。我还在 Linux (WSL) 上检查过,两者都正常。
-
您是否尝试过使用
VersionSuffix代替:github.com/dotnet/cli/issues/3778?
标签: .net docker .net-core dockerfile gitversion