为什么Docker容器退出时出现exec格式错误?

n53p2ov0  于 2023-03-17  发布在  Docker
关注(0)|答案(1)|浏览(202)

我使用了下面的dockerfile,它是关于一个aspcore 7 web应用程序的。

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:容器托管在一个树莓pi 4中。

lnvxswe2

lnvxswe21#

Raspberry有arm架构,构建在x86-64上的Docker映像不能在那里运行。
Linux arm64 Tags section here中有arm Docker映像。您需要使用buildx构建它。

相关问题