添加Serilog.AspNetCore后无法在Docker容器中运行.NET6应用
解决添加Serilog.AspNetCore后Docker容器启动失败的问题
解决方案
修改Dockerfile中的基础镜像,将mcr.microsoft.com/dotnet/runtime:6.0替换为mcr.microsoft.com/dotnet/aspnet:6.0。
修改后的完整Dockerfile如下:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["ProjectA/ProjectA.csproj", "ProjectA/"] COPY ["ProjectB/ProjectB.csproj", "ProjectB/"] COPY ["ProjectC/ProjectC.csproj", "ProjectC/"] RUN dotnet restore "ProjectA/ProjectA.csproj" COPY . . WORKDIR "/src/ProjectA" RUN dotnet build "ProjectA.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "ProjectA.csproj" -c Release -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "ProjectA.dll"]
原因分析
Serilog.AspNetCore v6.1.0包依赖ASP.NET Core运行时框架(Microsoft.AspNetCore.App),但你原Dockerfile使用的dotnet/runtime:6.0镜像仅包含.NET基础运行时,不包含ASP.NET Core的专属组件,因此容器启动时无法找到所需框架,触发报错。
移除该包后,应用不再依赖ASP.NET Core运行时,仅靠基础runtime镜像即可满足运行需求,因此能正常启动。
内容的提问来源于stack exchange,提问作者Vinit Divekar
相关产品推荐
相关产品推荐

