ASP.NET Core 7.0 容器:无法创建 CoreCLR,HRESULT:0x8007000E

Ser*_*pov 6 amazon-ecs asp.net-core-webapi aws-fargate asp.net-core-7.0

这是我尝试在 Amazon ECS 容器(AWS Fargate 服务)中运行 ASP.NET Core 7.0 运行时映像后收到的结果。

我的项目位于 ASP.NET Core 7.0 Web API 上。

这是一个基于 Jenkins 构建并发送到 Amazon ECS 的镜像 docker 文件

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 ["src/MetaGame/MyMetaGame.API/MyMetaGame.API.csproj", "src/MetaGame/MyMetaGame.API/"]
RUN dotnet restore "src/MetaGame/MyMetaGame.API/MyMetaGame.API.csproj"
COPY . .
WORKDIR "/src/src/MetaGame/MyMetaGame.API"
RUN dotnet build "MyMetaGame.API.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyMetaGame.API.dll"] 
Run Code Online (Sandbox Code Playgroud)

经过一番谷歌搜索后,我发现决定通过环境参数增加 GC 堆限制。我把它设置为512Mb

DOTNET_GCHeapHardLimit=20000000
Run Code Online (Sandbox Code Playgroud)

但这并没有解决我的问题。不知道有什么问题这是csproj文件的配置

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 ["src/MetaGame/MyMetaGame.API/MyMetaGame.API.csproj", "src/MetaGame/MyMetaGame.API/"]
RUN dotnet restore "src/MetaGame/MyMetaGame.API/MyMetaGame.API.csproj"
COPY . .
WORKDIR "/src/src/MetaGame/MyMetaGame.API"
RUN dotnet build "MyMetaGame.API.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyMetaGame.API.dll"] 
Run Code Online (Sandbox Code Playgroud)

Ser*_*pov 4

因此,通过添加来解决问题

ENV COMPlus_EnableDiagnostics=0
Run Code Online (Sandbox Code Playgroud)

在 Dockerfile 的最后阶段。所以,它应该看起来像

FROM base AS final
ENV COMPlus_EnableDiagnostics=0
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyMetaGame.API.dll"]
Run Code Online (Sandbox Code Playgroud)

在这里找到了解决方案