如何解决将 onnxruntime 库添加到适用于 Linux 的 .Net Core Docker 容器
我正在尝试在用于 Linux 部署的 .NET 5.0 Docker 容器上部署游戏服务器。我当前的 Dockerfile 看起来像这样,到目前为止它一直运行良好。我的代码被打包到一个位于 Darkrift_Server_Local/Plugins 文件夹中的 dll 中。 Darkrift.Server.Console.dll 是加载插件并运行我的逻辑的第三方网络包装器:
import seaborn as sns
df = sns.load_dataset("tips")
ax = sns.barplot(x="day",y="total_bill",data=df)
ax.xaxis.label.set_visible(False)
现在我想向我的服务器添加一个预训练的 ONNX 模型,供 AI 对手使用。我已将 microsoft.ml.OnnxRuntime Nuget 包添加到我的项目中,当我在 Windows 10 上运行它时,我的代码可以正常工作(使用 Powershell 执行 Darkrift.Server.Console.dll)。
但是,我无法在 Docker 容器中执行此操作,因为它无法找到 onnxruntime.dll 文件。具体错误如下:
System.TypeInitializationException:类型初始值设定项 “microsoft.ml.OnnxRuntime.NativeMethods”引发异常。
---> System.DllNotFoundException:无法加载共享库“onnxruntime”或其依赖项之一。
我已经尝试将构建过程中生成的 onnxruntime.dll 文件复制到 Darkrift_Server_Local 文件夹中的不同位置,但没有成功。我是 Docker 的新手,几年后又回到了 .NET,所以在弄清楚它应该如何工作时有点麻烦。希望对此有任何指导。
编辑:回应评论。我正在使用 VS2019 和 Release/Any cpu 构建项目。包包含代码如下:
FROM mcr.microsoft.com/dotnet/runtime:5.0
copY DarkRift_Server_Local/ App/
EXPOSE 4296/udp
EXPOSE 4296/tcp
workdir /App
ENTRYPOINT ["dotnet","./Lib/DarkRift.Server.Console.dll"]
我还尝试使用 dotnet publish -c Release 并将在发布文件夹中创建的运行时文件夹复制到我的 Darkrift_Server_Local 文件夹中的不同位置 - 应该提到这一点。
解决方法
由于您是在 Windows 上编译,但使用的是 Linux 容器,因此您必须确保您是 publishing for the correct runtime。
首先,使用 dotnet publish -r linux-x64
发布。您可能希望指定 -o <path>
以使其更易于查找。
然后,您可以使用 Dockerfile
复制图像中的那些内容。
或者,您可以在您的 Dockerfile
本身中构建/发布以避免此类平台问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。