运行 Linux Docker 中带有 .Net 标准库的 .Net Core 应用程序

Run .Net Core application with .Net Standard library in Linux Docker

我有一个 .Net Core 3.1.200,它引用了另一个用 .Net Standard 1.3 编写的代码(与 .Net Framework 应用程序共享)。

当我尝试将图像推送到 docker 时,它因各种内存故障而失败。 在添加参考之前,图像是 运行 完美的。 这是我的 docker 文件:

FROM mcr.microsoft.com/dotnet/core/runtime:3.1

COPY bin/publish/ /app-docker-image

WORKDIR /app-docker-image

ENTRYPOINT ["dotnet", "app.dll"]

有没有办法让它在 Linux docker 上运行?

谢谢!

快速回答:

在您的自定义 .net 应用程序中引用该项目。传输应用程序代码(以及 docker 内的 .NET 标准库依赖项)并构建新映像

解释:

您当前的方法不是创建容器映像的推荐方法。您不会将预构建代码复制到 运行time 图像。

与其将发布文件夹从主机复制到容器,不如将代码传输到 SDK 容器映像。

使用 docker 中的代码 运行 dotnet CLI 命令 build/publish 代码。

将发布的文件夹从 SDK 容器传输到 运行time 容器。您的 docker 文件应如下所示:

#请参阅 https://aka.ms/containerfastmode 以了解 Visual Studio 如何使用此 Dockerfile 构建您的图像以加快调试速度。

FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS 基础 WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["ConsoleApp1/ConsoleApp1.csproj", "ConsoleApp1/"]
RUN dotnet restore "ConsoleApp1/ConsoleApp1.csproj"
COPY . .
WORKDIR "/src/ConsoleApp1"
RUN dotnet build "ConsoleApp1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "ConsoleApp1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ConsoleApp1.dll"]