.NET Core Docker Image for Linux-arm (Raspberry pi)

Posted

技术标签:

【中文标题】.NET Core Docker Image for Linux-arm (Raspberry pi)【英文标题】: 【发布时间】:2021-12-12 01:00:51 【问题描述】:

我制作了一个简单的 .Net 6.0 控制台应用程序,并使用带有 linux-arm 标志的 dotnet publish 命令构建了它

dotnet pubish -c 发布 -r linux-arm

上面生成linux ARM dll的。

然后我使用 Dockerfile

为它创建了一个镜像
FROM mcr.microsoft.com/dotnet/runtime:6.0
 COPY bin/Release/net6.0/linux-arm /MyDockerApp
 WORKDIR /MyDockerApp
   ENTRYPOINT ["dotnet", "DockerTest.dll"]

(我没有构建它,因为我的代码已经使用 dotnet publish 为 arm-v7 构建了)

现在我试图在我的 Raspberry pi(即 Arm/Linux/v7)上将此映像作为容器运行,但我遇到了错误。

警告:请求的图像平台 (linux/amd64) 不匹配 检测到的主机平台 (linux/arm/v7) 并且没有特定平台 请求的standard_init_linux.go:228:exec用户进程导致:exec 格式错误

如何编译它以便在我的 Raspberrypi 4 上运行它(我不想在 Raspberry pi 上构建我的代码,我只想使用 RunTime)。

【问题讨论】:

【参考方案1】:

在您的Dockerfile 中为您的RaspberryPI 使用相应的ARM .NET runtime image

例如,这个应该可以工作

FROM mcr.microsoft.com/dotnet/runtime:6.0.0-focal-arm32v7

而不是默认

FROM mcr.microsoft.com/dotnet/runtime:6.0

适用于普通电脑。

【讨论】:

这样做我得到错误:找不到框架'Microsoft.AspNetCore.App',版本'6.0.0'(arm)。 你说你有一个 console 应用程序,所以我想它不是一个 ASP.NET 应用程序。无论如何,在这种情况下,您可以将提到的行更改为FROM mcr.microsoft.com/dotnet/aspnet:6.0.0-focal-arm32v7。因为 ASP.NET 有单独的运行时映像 这样做给了我错误:Aborted (core dumped) 看起来已经是应用程序错误。错误中有更多详细信息吗? 原来我的 pi 运行的是 Debian 10 (Buster),升级到 Bullseye,同样的代码运行良好。

以上是关于.NET Core Docker Image for Linux-arm (Raspberry pi)的主要内容,如果未能解决你的问题,请参考以下文章

docker 容器:更改网络内核设置,net.core.rmem_max

Upload Image to .NET Core 2.1 API

.NET Core容器化开发系列——Docker里面跑个.NET Core

.Net Core in Docker

.NET Core容器化@Docker

.Net Core in Docker极简入门(上篇)