c# - .net核心无法作为独立的应用程序运行。在 docker 上

标签 c# docker .net-core

我有这个用于.net核心的Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 8080

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

FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish --self-contained

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

当我运行docker时出现错误:
A fatal error was encountered. The library 'libhostpolicy.so' required to execute the application was not found in '/app/'.
我读了this,与我的问题无关

最佳答案

-自包含需要-r(-运行时)

-r,--runtime要为其发布的目标运行时。在创建自包含部署时使用此方法。
默认值为发布框架相关的应用程序。

我首先将Dockerfile中的publish命令更改为此:

RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish --self-contained --runtime linux-64

新零件:

我运行以下命令
$ RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish --self-contained

我得到以下错误:
/usr/local/share/dotnet/sdk/3.0.100/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.RuntimeIdentifierInference.targets(127,5): error NETSDK1031: It is not supported to build or publish a self-contained application without specifying a RuntimeIdentifier.  Please either specify a RuntimeIdentifier or set SelfContained to false. [/Users/ziaullahkhan/Code/SelfContainedApp/SelfContainedApp.csproj]

我将命令更改为此:
$ dotnet publish -c Release --self-contained --runtime linux-x64 -o out

它成功发布了所有内容。

然后,我构建了docker镜像。在容器上启动 shell
$ docker run -it khanziaullah/sca bash
root@eb5dc8083aa3:/app/out# ls -l libhostpolicy.so 
-rwxr--r-- 1 root root 327384 Sep 13 15:21 libhostpolicy.so
root@eb5dc8083aa3:/app/out# dotnet SelfContainedApp.dll
Hello World!

所以我看到了libhostpolicy.so文件。

尝试启动 shell 程序,并为所有依赖项查找构建和复制位置。 COPY命令可能出错。

关于c# - .net核心无法作为独立的应用程序运行。在 docker 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58936739/

相关文章:

c# - 在 WPF 中启动 XAML 动画

angular - 从 Angular 7 迁移到 12 后出现混合内容错误

docker - .dockeringore文件可以包含卷文件夹吗?

.net - ".NET Core"是什么?

docker 无法访问 API dotnet

csv - C# CSVHelper : After BadDataException Reader doesn't continue with next row

c# - 使用文本提取器后,U-SQL 忽略在 JsonFunctions.JsonTuple() 中导致 JSON 异常的行

c# - 意外的字符串总和

c# - ASP.NET 多字段验证

git - 在Docker容器中使用git