【问题标题】:.net core Failed to run as a self-contained app. on a docker.net core 无法作为独立应用程序运行。在码头上
【发布时间】:2019-11-19 14:52:04
【问题描述】:

我有这个 .net core 的 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,和我的问题无关

【问题讨论】:

标签: c# docker .net-core


【解决方案1】:

--self-contained 需要一个 -r (--runtime)

-r, --runtime 要发布的目标运行时。这在创建独立部署时使用。 默认是发布依赖于框架的应用程序。

我首先将 Dockerfile 中的发布命令更改为:

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 命令可能出错了。

【讨论】:

  • 谢谢。我不认为是这种情况,我只是想在 docker 中运行 .net 核心项目......我没有看到有人在做 --self-contained 并且这引发了其他错误......)-:
  • /Users/ziaullahkhan/Code/SelfContainedApp/SelfContainedApp.csproj 的恢复在 16.23 毫秒内完成。 /usr/local/share/dotnet/sdk/3.0.100/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.RuntimeIdentifierInference.targets(127,5):错误 NETSDK1031:不支持构建或发布不指定 RuntimeIdentifier 的独立应用程序。请指定 RuntimeIdentifier 或将 SelfContained 设置为 false。 [/Users/ziaullahkhan/Code/SelfContainedApp/SelfContainedApp.csproj]
【解决方案2】:

尝试在csproj中加入如下代码

<PackageReference Include="Microsoft.NETCore.App" Version="1.0.1" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多