其中一个 IoT Edge 模块处于退避状态 Raspberry Pi 4 with Raspbian OS

One of the IoT Edge Module is in Backoff state Raspberry Pi 4 with Raspbian OS

我开发了一个模块并为 arm64v8 架构构建了图像,因为我的 Edge 设备在 Raspberry Pi 中 运行ning 4. 我得到了文件部署。arm64v8.json 在配置中文件夹正确。但是当我在设备上 Visual Studio 代码和 select 为单个设备创建部署时,正在添加模块,但其中一个模块显示退避状态。这里可能是什么问题,并且严格遵循 this doc.

我也试过重启服务。

设备信息

主持人OS:覆盆子OS 架构:Arm64v8 容器 OS:Linux 个容器

运行时版本

iotedged:iotedge 1.0.9.4 Docker/Moby [运行 docker 版本]:

更新:

我正在尝试在我的 64 位 Windows 开发机中构建 arm32 映像,我想这就是我遇到此问题的原因。现在我有3个选择。

  1. 从这里安装 64 位版本的 Raspberry OS
  2. 设置 32 位虚拟机并将其用作开发机和 构建 32 位图像
  3. 我已经有一个 WSL 运行ning,也许 运行ning Visual Studio 代码 有解决办法吗?

你能告诉我更好的方法吗?

有几个问题我做错了。第一件事是,我试图在我的 64 位 Windows 开发机中构建一个 arm64 映像,然后将映像部署到 arm32 Raspbian OS,这永远行不通。您可以通过 运行 以下命令查看版本和其他详细信息。

如果它显示 aarch64 那么它是 64 位的。如果它说 armv7l 那么它是 32 位的。在我的例子中,它是 arm71。所以现在我必须在我的 64 bit Windows Host machine 上构建一个 arm32 容器镜像并在我的 Raspberry Pi 4 上使用它。按照this doc,肯定是可以的

You can build ARM32 and ARM64 images on x64 machines, but you will not be able to run them

运行 不是我的问题,因为我只需要构建图像,我将在我的 Raspberry Pi 中使用它。为了让它工作,我必须更改我的 Dockerfile.arm32v7,特别是我们拉取基本图像的第一行。

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim-arm32v7
WORKDIR /app
COPY --from=build-env /app/out ./

RUN useradd -ms /bin/bash moduleuser
USER moduleuser

ENTRYPOINT ["dotnet", "SendTelemetry.dll"]

“build-env”图像应与主机 OS 具有相同的体系结构,最终图像应为目标 OS 体系结构。对 docker 文件进行更改后,我更改了模块文件夹内 module.json 文件中的版本,以便在我使用right-clicking deployment.template.json 之后的选项 Build and Push IoT Edge Solution,然后我在 Visual Studio 代码中的设备名称上的 right-clicking 之后使用了 Create Deployment for Single Device 选项。然后当我监视设备时(开始监视 Built-in 事件端点选项),我得到了这个输出。

Microsoft 的支持对于这个问题真的很棒。他们确实帮助我解决了我发布的这个 GitHub issue