【问题标题】:Running a .NET Core 2.0 C# module, with OpenCV, in a nanoserver Docker container在 nanoserver Docker 容器中使用 OpenCV 运行 .NET Core 2.0 C# 模块
【发布时间】:2018-04-16 00:12:42
【问题描述】:

我有一个非常基本的 C# .NET Core 2.0 应用程序,它使用 OpenCV 的几个非常基本的功能作为概念证明。

我试图在 nanoserver 容器中运行它,最终部署为 IoT Edge 模块,但我收到一条错误消息,提示它无法找到 DLL 文件。

Unhandled Exception: System.TypeInitializationException: The type initializer for 'OpenCvSharp.NativeMethods' threw an exception. --->
System.DllNotFoundException: Unable to load DLL 'OpenCvSharpExtern': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

我曾尝试仅使用 dotnet publish IoTCoreCSharp.csprojdotnet publish IoTCoreCSharp.csproj --runtime win10-x64 --configuration Debug --force 进行编译,但都没有成功。

我的 Docker 文件如下所示:

FROM microsoft/dotnet:2.0.0-runtime-nanoserver-1709

ARG EXE_DIR=.

WORKDIR /app

COPY $EXE_DIR/ ./

COPY system32_opencvsharp_deps/ C:/Windows/System32

CMD ["dotnet" "IoTCoreCSharp.dll"]

system32_opencvsharp_deps 包含 avicap32.dll、avifil32.dll、msacm32.dll、msvfw32.dll 和 vcruntime140.dll。 OpenCvSharpExtern.dll 位于我们正在执行的 DLL 文件目录的根目录下。

该程序运行在基于windowsservercore 的映像中,并在我的开发机器上完美安装了.NET,但这种映像无法在我们需要的Windows 10 IoT Core 上运行。

尝试在 IoT Core 上运行时出错:

c:\Program Files\docker\docker.exe: Error response from daemon: container
e9da3baa806f161153fdb7f60a9401a5ff46c32a959499cbe0bd822b1fc0dda3 encountered an error during Start: failure in a
Windows system call: The compute system exited unexpectedly. (0xc0370106).

【问题讨论】:

  • 您的代码是否在服务器核心映像中工作?
  • @GregorySuvalian 是否有基于服务器核心的 dotnet 映像供我尝试?
  • 没有,但您可以使用基于 servercore 的映像并在其上安装 dotnet core (docs.microsoft.com/en-us/dotnet/core/tools/…)
  • 我正在尝试创建一个基于 windowsservercore 的新图像以检查它是否有效,但下载需要很长时间,我会在它执行某些操作时报告。谢谢。
  • 是的,它确实在 windowsservercore 映像中工作。但是 windowsserver core 不能在 windows 10 iot core 上运行。

标签: opencv .net-core docker-for-windows azure-iot-edge docker


【解决方案1】:

您可以参考this sample。此示例展示了如何在以 microsoft/dotnet-framework:4.7.1-windowsservercore-1709 作为基础映像的 Windows 容器中运行 OpenCVSharp。它表明你遇到了同样的问题。

【讨论】:

  • 谢谢,我已经看过了,这种类型的图像不能在 windows 10 iot 核心上运行,只有 nanoserver 可以。尝试在 Windows 10 iot 核心上运行 windowsservercore 映像时出错:c:\Program Files\docker\docker.exe:来自守护进程的错误响应:容器 e9da3baa806f161153fdb7f60a9401a5ff46c32a959499cbe0bd822b1fc0dda3 在启动期间遇到错误:Windows 系统调用失败:计算系统已退出不料。 (0xc0370106)。
  • @Hammatt,你的主板是什么,是 Minnowboard Turbot 吗?Windows IoT Core 仅在基于 Intel x64 的处理器上支持 Azure IoT Edge。
  • 我们有多个 Windows 10 IoT 核心板,所有这些板都是基于 intel x64 的。我们确实有一些 Minnowboard Turbot,我专门对那个进行了测试,得到了相同的结果。我们正在所有板上成功运行其他物联网边缘模块。问题是它不支持基于 windowsservercore 的容器,据我所知,仅支持 nanoserver。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
相关资源
最近更新 更多