首页 > 解决方案 > 尝试运行依赖于框架的构建时找不到 libhostpolicy.so

问题描述

我正在尝试为我的 asp.net 3.1 服务构建 docker 映像。当我构建自包含时,我可以mcr.microsoft.com/dotnet/core/runtime-deps很好地使用基本图像。但是,为了提高构建速度,我尝试使用mcr.microsoft.com/dotnet/core/runtimeoraspnet作为我的基本映像并复制非自包含(依赖于框架)的发布输出(来自 docker build 的早期阶段)。

但是,当我尝试运行容器时,我看到A fatal error was encountered. The library 'libhostpolicy.so' required to execute the application was not found in '/usr/share/dotnet'.

我可以使用 webapi 示例项目和以下 Dockerfile 重现这一点

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic as build

WORKDIR /src

COPY . .

RUN dotnet restore --runtime ubuntu.18.04-x64
RUN dotnet build --no-restore -c Release --runtime ubuntu.18.04-x64
RUN dotnet publish --no-restore --no-build -c Release -r ubuntu.18.04-x64 -o publish --self-contained false ./app.csproj

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic

WORKDIR /app

COPY --from=build /src/publish/. /app/

CMD [ "./app" ]

我也可以看到libhostpolicy.so垃圾箱确实存在/usr/share/dotnet/shared/Microsoft.NETCore.App/3.1.3/libhostpolicy.so

你能看到我在这里做错了吗?

标签: c#dockerasp.net-core.net-core

解决方案


我仍然不确定错误的原因是什么,但我可以通过从 dotnet 命令中省略运行时来生成一个与有问题的容器大小相同的容器,如下所示:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic as build

WORKDIR /src

COPY . .

RUN dotnet restore
RUN dotnet build --no-restore -c Release
RUN dotnet publish --no-restore --no-build -c Release -o publish ./app.csproj

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic 

WORKDIR /app

COPY --from=build /src/publish/. /app/

CMD [ "./app" ]

如果有人知道为什么传递 RID 会导致运行时依赖错误,我会很想知道,但现在我很高兴


推荐阅读