【发布时间】: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