【问题标题】:Run .Net Core application with .Net Standard library in Linux Docker在 Linux Docker 中使用 .Net 标准库运行 .Net Core 应用程序
【发布时间】: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

标签: c# linux docker .net-core .net-standard


【解决方案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 命令 - 没有“基础” - 更改为发布并且它工作)
猜你喜欢
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 2018-03-29
相关资源
最近更新 更多