我正在为我的Raspberry Pi 3 Model B +开发Asp.Net Core应用程序(带有React前端)。基于模板的应用程序(dotnet new react -o react-app)。
我想在Windows OS笔记本电脑中本地开发和调试应用程序,然后构建适用于ARM32架构的应用程序,将映像推送到docker hub并在Raspberry设备上提取并运行映像。
我发现,如果我在Windows笔记本电脑上使用microsoft / dotnet:2.2-sdk和microsoft / dotnet:2.2-aspnetcore-runtime构建应用程序,则无法在Raspberry设备上运行此映像,并显示错误消息:' standard_init_linux.go:190:exec用户进程引起“ exec格式错误”。看起来Windows构建的图像只能用于AMD64架构。
然后我尝试将生成器和运行时映像更改为ARM32,但是现在生成过程因错误而崩溃:
qemu: Unsupported syscall: 389
qemu: Unsupported syscall: 345 qemu:
uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault The command '/bin/sh -c dotnet restore' returned a
non-zero code: 139
我的Docker文件:
#FROM microsoft/dotnet:2.2-sdk AS builder
FROM microsoft/dotnet:2.2-sdk-stretch-arm32v7 AS builder
WORKDIR /source
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get install -y nodejs
COPY *.csproj .
RUN dotnet restore
COPY ./ ./
RUN dotnet publish "./react-app.csproj" --output "./dist" --configuration Release --no-restore
#FROM microsoft/dotnet:2.2-aspnetcore-runtime
FROM microsoft/dotnet:2.2-aspnetcore-runtime-stretch-slim-arm32v7 as runtime
WORKDIR /app
COPY --from=builder /source/dist .
EXPOSE 80
ENTRYPOINT ["dotnet", "react-app.dll"]
是否可以从Windows OS为Raspberry设备构建映像?
如果是,您能帮我设置Docker吗?
答案 0 :(得分:1)
我对Docker知识还很陌生,但我有一个示例说明了在我的RPi上运行的Azure Edge模块的情况,这应该是相同的概念。对于构建环境,我使用microsoft/dotnet:2.1-sdk
-这是因为我的主机是Win10 x86_64,并且生成的IL代码仍然与平台无关。
但是,因为目标平台是arm32v7,所以 dotnet运行时必须是arm32v7。因此,对于运行时,我使用microsoft/dotnet:2.1-runtime-stretch-slim-arm32v7
(或您的情况下的microsoft/dotnet:2.2-aspnetcore-runtime-stretch-slim-arm32v7
)。
尝试此Dockerfile:
FROM microsoft/dotnet:2.2-sdk AS builder
WORKDIR /source
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get install -y nodejs
COPY *.csproj .
RUN dotnet restore
COPY ./ ./
RUN dotnet publish "./react-app.csproj" --output "./dist" --configuration Release --no-restore
FROM microsoft/dotnet:2.2-aspnetcore-runtime-stretch-slim-arm32v7 as runtime
WORKDIR /app
COPY --from=builder /source/dist .
EXPOSE 80
ENTRYPOINT ["dotnet", "react-app.dll"]