其中一个 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个选择。
- 从这里安装 64 位版本的 Raspberry OS
- 设置 32 位虚拟机并将其用作开发机和
构建 32 位图像
- 我已经有一个 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。
我开发了一个模块并为 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个选择。
- 从这里安装 64 位版本的 Raspberry OS
- 设置 32 位虚拟机并将其用作开发机和 构建 32 位图像
- 我已经有一个 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。