【问题标题】:Deploying ASP.NET Core Docker image from x86 to ARM (Raspberry Pi) in VS2019在 VS2019 中将 ASP.NET Core Docker 映像从 x86 部署到 ARM (Raspberry Pi)
【发布时间】:2020-05-26 06:18:46
【问题描述】:

我在 Raspberry Pi 4 上安装了 Docker,我想通过 Docker Hub 将 ASP.NET Core 3.1 应用程序(Razor pages 电影示例应用程序)部署到我的 Pi。当我从 Docker hub 拉取图像并尝试运行它时,我得到了错误

standard_init_linux.go:211: exec user process caused "exec format error

我在 Windows 10 x64 PC 上构建了我的 Docker 映像。在我的 Pi 上检查 Docker 映像时,我可以看到架构是错误的

"Architecture": "amd64",

应该可以在 x64 机器since last year 上构建针对 ARM 的 Docker 映像,但不知何故,我的映像是针对 x64 构建的。我已将 Dockerfile 更改为目标 linux-arm


FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["RazorMovies/RazorMovies.csproj", "RazorMovies/"]
RUN dotnet restore "RazorMovies/RazorMovies.csproj" -r linux-arm
COPY . .
WORKDIR "/src/RazorMovies"
RUN dotnet build "RazorMovies.csproj" -c Release -o /app/build -r linux-arm

FROM build AS publish
RUN dotnet publish "RazorMovies.csproj" -c Release -o /app/publish -r linux-arm

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "RazorMovies.dll"]

我已经将 Build -> Publish in VS2019 中的目标运行时设置更改为目标 linux-arm,如下图所示。

我知道我的 Pi 能够通过 Docker 运行 ASP.NET Core 应用程序,我使用找到的示例 here 通过 Docker 运行相同的应用程序。该图像将架构显示为 arm 而不是 amd64。

docker run --rm -it -p 8000:80 mcr.microsoft.com/dotnet/core/samples:aspnetapp

如果我的图像针对 ARM 而不是 x64 构建,我缺少什么?

【问题讨论】:

    标签: visual-studio docker asp.net-core .net-core raspberry-pi


    【解决方案1】:

    找到了解决方案,我还需要更改基础

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
    

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim-arm32v7 AS base
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2019-11-05
    • 2020-10-16
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多