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

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

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

  1. FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
  2. WORKDIR /app
  3. EXPOSE 80
  4. EXPOSE 443
  5. FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
  6. WORKDIR /src
  7. COPY ["WebApplication3.csproj", "."]
  8. RUN dotnet restore "./WebApplication3.csproj"
  9. COPY . .
  10. WORKDIR "/src/."
  11. RUN dotnet build "WebApplication3.csproj" -c Release -o /app/build
  12. FROM build AS publish
  13. RUN dotnet publish "WebApplication3.csproj" -c Release -o /app/publish /p:UseAppHost=false
  14. FROM base AS final
  15. WORKDIR /app
  16. COPY --from=publish /app/publish .
  17. ENTRYPOINT ["dotnet", "WebApplication3.dll"]

应用程序配置如下

  1. <Project Sdk="Microsoft.NET.Sdk.Web">
  2. <PropertyGroup>
  3. <TargetFramework>net7.0</TargetFramework>
  4. <Nullable>enable</Nullable>
  5. <ImplicitUsings>enable</ImplicitUsings>
  6. <UserSecretsId>81f43918-ec08-492f-91d0-94f7160b54d5</UserSecretsId>
  7. <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
  8. <DockerfileContext>.</DockerfileContext>
  9. <PlatformTarget>ARM64</PlatformTarget>
  10. </PropertyGroup>
  11. <ItemGroup>
  12. <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.0" />
  13. <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0" />
  14. <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
  15. </ItemGroup>
  16. </Project>

发布到DockerHub时使用以下设置

运行时设置为linux-arm64
上传后,操作系统/体系结构显示为linux/amd64,而不是linux-arm64
最后,当容器启动时,它会退出并显示错误

  1. 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构建它。

相关问题