微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 onnxruntime 库添加到适用于 Linux 的 .Net Core Docker 容器

如何解决将 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?