.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