在 Linux Docker 中使用 .Net 标准库运行 .Net Core 应用程序

Posted

技术标签:

【中文标题】在 Linux Docker 中使用 .Net 标准库运行 .Net Core 应用程序【英文标题】:Run .Net Core application with .Net Standard library in Linux Docker 【发布时间】:2020-11-17 11:57:45 【问题描述】:

我有一个 .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 上运行?

谢谢!

【问题讨论】:

你能分享你看到的错误信息吗? 这是我得到的错误:dotnet[29542]: segfault at 0 ip sp error 4 in libc-2.28.so 【参考方案1】:

快速回答:

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

说明:

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

您应该将代码传输到 SDK 容器映像,而不是将发布文件夹从主机复制到容器。

使用 docker 中的代码运行 dotnet CLI 命令来构建/发布代码。

将发布的文件夹从 SDK 容器转移到运行时容器。您的 docker 文件应如下所示:

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

来自 mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS 基础 工作目录 /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"]

【讨论】:

非常感谢!它需要一些修改(例如最后一个 FROM 命令 - 没有“基础” - 更改为发布并且它工作)

以上是关于在 Linux Docker 中使用 .Net 标准库运行 .Net Core 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

无法从在 Docker (Linux) 中运行的 ASP.NET Core 连接到 SQL Server 命名实例

Linux下使用Docker部署.NET Core项目

Asp.Net Core 发布到 Docker(Linux Centos 虚拟机,使用Dockerfile)

Jenkins 构建自动化 .NET Core 发布镜像

使用 Visual Studio 2017 调试已运行的 Docker Linux .NET Core 容器

如何从 Visual Studio 调试在 Linux Docker 容器中运行的 .NET Core 应用程序