尝试 运行 Windows 主机上的 Linux 容器时出现 IoT Edge 代理错误:"image operating system "linux“无法在此平台上使用”

Getting IoT Edge Agent error trying to run a Linux container on Windows host: "image operating system "linux" cannot be used on this platform"

我正在尝试在 Windows 主机上创建 Azure IoT Edge 设备,但 运行 将模块构建为 Linux 容器。在之前的实验中,我能够在 Linux 主机上成功创建一个 Azure IoT Edge 设备,并成功地 运行ning 这个相同的 Linux 容器模块。

但是,当我将模块部署到 Windows 主机上时,模块显示它不是 运行ning,当我使用 "iotedge logs camera-capture" 查看模块的日志时,我得到以下错误:

<6> 2019-12-02 13:32:56.016 -08:00 [INF] - Executing command: "Create module camera-capture"
<3> 2019-12-02 13:33:11.674 -08:00 [ERR] - Executing command for operation ["create"] failed.
Microsoft.Azure.Devices.Edge.Agent.Edgelet.EdgeletCommunicationException- Message:Error calling Create module camera-capture: Could not create module camera-capture
        caused by: Could not pull image localhost:5000/camera-capture-opencv:1.1.128-amd64
        caused by: image operating system "linux" cannot be used on this platform, StatusCode:500, at:   at Microsoft.Azure.Devices.Edge.Agent.Edgelet.Version_2019_01_30.ModuleManagementHttpClient.HandleException(Exception exception, String operation) in C:\agent\_work\s\edge-agent\src\Microsoft.Azure.Devices.Edge.Agent.Edgelet\version_2019_01_30\ModuleManagementHttpClient.cs:line 194

我没有在网上或通过 Microsoft 论坛找到任何关于能够解决我的问题的特定错误的结果。作为记录,我已确保:

如有任何帮助,我们将不胜感激!

在这个问题上卡了几天之后,我终于找到了解决办法。问题是 Windows 上的 IoT Edge 运行时未配置为处理 Linux 容器! 在撰写本文时,Microsoft 在此处记录了解决方案:https://docs.microsoft.com/en-us/azure/iot-edge/how-to-install-iot-edge-windows-with-linux

但如果将来出现故障 link,您基本上必须在安装 Azure IoT Edge 运行时以处理 linux 容器时添加额外的标志。

. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; `
Deploy-IoTEdge -ContainerOs Linux
. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; `
Initialize-IoTEdge -ContainerOs Linux

我将 Docker 桌面更改为 Linux 容器模式并在 VSCode 中编译。它像魔术一样工作。