为什么 Docker 容器以执行格式错误退出?

问题描述 投票:0回答:0

我使用以下 dockerfile。这是关于 aspcore7 网络应用程序。

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["WebApplication3.csproj", "."]
RUN dotnet restore "./WebApplication3.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "WebApplication3.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplication3.csproj" -c Release -o /app/publish /p:UseAppHost=false

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

应用配置是这样

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net7.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>81f43918-ec08-492f-91d0-94f7160b54d5</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
    <DockerfileContext>.</DockerfileContext>
    <PlatformTarget>ARM64</PlatformTarget>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.0" />
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
  </ItemGroup>

</Project>

我在发布到 DockerHub 时使用以下设置

运行时间设置为

linux-arm64

上传后,操作系统/架构显示为

linux/amd64
而不是
linux-arm64

最后当容器启动时,它退出并出现错误

exec /usr/bin/dotnet: exec format error

我在这里做错了什么? 这个错误与架构有关吗?如果这是真的,为什么我在发布时有不同的架构?

PS:容器托管在树莓派 pi4 中。

docker .net-core dockerfile dockerhub
© www.soinside.com 2019 - 2024. All rights reserved.