c# - 尝试运行依赖于框架的构建时找不到 libhostpolicy.so
问题描述
我正在尝试为我的 asp.net 3.1 服务构建 docker 映像。当我构建自包含时,我可以mcr.microsoft.com/dotnet/core/runtime-deps
很好地使用基本图像。但是,为了提高构建速度,我尝试使用mcr.microsoft.com/dotnet/core/runtime
oraspnet
作为我的基本映像并复制非自包含(依赖于框架)的发布输出(来自 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
你能看到我在这里做错了吗?
解决方案
我仍然不确定错误的原因是什么,但我可以通过从 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 会导致运行时依赖错误,我会很想知道,但现在我很高兴
推荐阅读
- linux - 将 isciadm 配置为在另一个 iscsi-portal 关闭时回退到另一个 iscsi-portal
- batch-file - CMD批处理中的子字符串
- javascript - 为什么函数会修改 Javascript 上参数的值?
- java - 为什么不允许超类final方法和子类方法同名?
- python - 如何将带有盐的 C# 密码散列转换为 windows 的 python
- java - 通过@requestparam Spring 上传多部分文件列表时出错
- amazon-cloudformation - AWS CloudFormation 条件
- python - 如何通过 python 执行这种类型的循环?
- office-scripts - 从 Office 脚本调用 .js 库的函数
- python - 如何根据时间插入位置数据