Docker:未找到框架和运行时 (.NET 8)

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

我正在构建一个连接到 RabbitMQ 服务器和 Sql 数据库的后台服务(.NET 8)。 RabbitMQ 服务器和 Sql 数据库都托管在 docker 上。 当我在 Visual Studio 2022 上以调试模式运行应用程序时,应用程序运行得很好。 当我发布该应用程序并将其注册为我使用 Windows 11 的计算机上的服务时,它也运行得很好。 我编写了一个 Dockerfile 来容器化应用程序。构建镜像和容器后,容器无法启动。 这里有更多详细信息。

解决方案文件夹结构: Solution folder structure

项目文件:

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

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UserSecretsId>dotnet-LogRecord_Service-2087123f-9942-4cc7-aa76-8c572656e691</UserSecretsId>
    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
    <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.0" />
    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.6" />
    <PackageReference Include="NLog" Version="5.2.8" />
    <PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" />
    <PackageReference Include="NLog.Web.AspNetCore" Version="5.3.8" />
    <PackageReference Include="Quartz" Version="3.8.1" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Database_Logic_Layer\Database_Logic_Layer.csproj" />
    <ProjectReference Include="..\Geotab_Logic_Layer\Geotab_Logic_Layer.csproj" />
    <ProjectReference Include="..\QueueManagement\QueueManagement.csproj" />
  </ItemGroup>
</Project>

Docker 文件:

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["LogRecord_Service/LogRecord_Service.csproj", "LogRecord_Service/"]
COPY ["Database_Logic_Layer/Database_Logic_Layer.csproj", "Database_Logic_Layer/"]
COPY ["DataAccess/DataAccess.csproj", "DataAccess/"]
COPY ["Helpers/Helpers.csproj", "Helpers/"]
COPY ["Geotab_Logic_Layer/Geotab_Logic_Layer.csproj", "Geotab_Logic_Layer/"]
COPY ["QueueManagement/QueueManagement.csproj", "QueueManagement/"]
RUN dotnet restore "./LogRecord_Service/LogRecord_Service.csproj"
COPY . .
WORKDIR "/src/LogRecord_Service"
RUN dotnet build "./LogRecord_Service.csproj" -c $BUILD_CONFIGURATION -o /app/build

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

FROM mcr.microsoft.com/dotnet/runtime:8.0 AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "LogRecord_Service.dll"]

图像构建日志:

docker build -t log_record_producer_image .
[+] Building 1.2s (22/22) FINISHED                                                                                                                                                     docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                             0.0s
 => => transferring dockerfile: 1.31kB                                                                                                                                                           0.0s
 => [internal] load metadata for mcr.microsoft.com/dotnet/runtime:8.0                                                                                                                            0.0s
 => [internal] load metadata for mcr.microsoft.com/dotnet/sdk:8.0                                                                                                                                0.4s
 => [internal] load .dockerignore                                                                                                                                                                0.0s
 => => transferring context: 464B                                                                                                                                                                0.0s
 => [build  1/12] FROM mcr.microsoft.com/dotnet/sdk:8.0@sha256:9bb0d97c4361cc844f225c144ac2adb2b65fabfef21f95caedcf215d844238fe                                                                  0.0s
 => CACHED [final 1/3] FROM mcr.microsoft.com/dotnet/runtime:8.0                                                                                                                                 0.0s
 => [internal] load build context                                                                                                                                                                0.1s
 => => transferring context: 6.22kB                                                                                                                                                              0.0s
 => [final 2/3] WORKDIR /app                                                                                                                                                                     0.1s
 => CACHED [build  2/12] WORKDIR /src                                                                                                                                                            0.0s
 => CACHED [build  3/12] COPY [LogRecord_Service/LogRecord_Service.csproj, LogRecord_Service/]                                                                                                   0.0s
 => CACHED [build  4/12] COPY [Database_Logic_Layer/Database_Logic_Layer.csproj, Database_Logic_Layer/]                                                                                          0.0s
 => CACHED [build  5/12] COPY [DataAccess/DataAccess.csproj, DataAccess/]                                                                                                                        0.0s
 => CACHED [build  6/12] COPY [Helpers/Helpers.csproj, Helpers/]                                                                                                                                 0.0s
 => CACHED [build  7/12] COPY [Geotab_Logic_Layer/Geotab_Logic_Layer.csproj, Geotab_Logic_Layer/]                                                                                                0.0s
 => CACHED [build  8/12] COPY [QueueManagement/QueueManagement.csproj, QueueManagement/]                                                                                                         0.0s
 => CACHED [build  9/12] RUN dotnet restore "./LogRecord_Service/LogRecord_Service.csproj"                                                                                                       0.0s
 => CACHED [build 10/12] COPY . .                                                                                                                                                                0.0s
 => CACHED [build 11/12] WORKDIR /src/LogRecord_Service                                                                                                                                          0.0s
 => CACHED [build 12/12] RUN dotnet build "./LogRecord_Service.csproj" -c Release -o /app/build                                                                                                  0.0s
 => CACHED [publish 1/1] RUN dotnet publish "./LogRecord_Service.csproj" -c Release -o /app/publish /p:UseAppHost=false                                                                          0.0s
 => [final 3/3] COPY --from=publish /app/publish .                                                                                                                                               0.5s
 => exporting to image                                                                                                                                                                           0.1s
 => => exporting layers                                                                                                                                                                          0.1s
 => => writing image sha256:bc73c757dec2ead70c8db7df5a2e08fe9665e8b0396ab2a141bf590fd449af82                                                                                                     0.0s
 => => naming to docker.io/library/log_record_producer_image                                                                                                                                     0.0s

View build details: docker-desktop://dashboard/build/default/default/r14olesvrbxevmit01mirf4ev

What's Next?
  View a summary of image vulnerabilities and recommendations → docker scout quickview

创建并尝试启动容器后的容器日志:

enter image description here

我不确定问题是什么。 我使用类似的文件来创建并启动控制台应用程序(也是.Net 8)的容器,并且它运行得非常好。 请帮忙解决这个问题。

  • 我向 ChatGPT 询问了这个问题,它不断重新组合相同的信息。它说我的 Dockerfile 不正确,我应该更改它。它给我的建议 Dockerfile 与我拥有的相同。
  • 我也在Github上检查了类似的问题,建议的解决方案并不能解决我当前的问题。
c# .net docker asp.net-core .net-8.0
1个回答
0
投票

您的应用程序正在寻找未包含在

runtime
图像中的 ASP.NET 框架。您需要使用
aspnet
图像作为基础图像。

改变

FROM mcr.microsoft.com/dotnet/runtime:8.0 AS final

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final

它应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.