Docker для рабочей службы net7, работающей в контейнере linux, не работает

У меня есть рабочая служба net7, которая работает, как и ожидалось, с реализацией по умолчанию из шаблона.

Я хочу, чтобы эта служба запускала работу и делала что-то в базе данных сервера sql. Это другая библиотека и при запуске workerservice на моем хосте через Visual Studio ide она ни на что не жалуется.

Однако, когда я пытаюсь создать образ, он создается, но когда я запускаю этот образ, я получаю

im-svc exited with code 150
im-svc  | No frameworks were found.
im-svc  |
im-svc  | Learn about framework resolution:
im-svc  | https://aka.ms/dotnet/app-launch-failed
im-svc  |
im-svc  | To install missing framework, download:
im-svc  | https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=7.0.0&arch=x64&rid=debian.11-x64
im-svc  | You must install or update .NET to run this application.
im-svc  |
im-svc  | App: /app/Svc.InventoryManagement.dll
im-svc  | Architecture: x64
im-svc  | Framework: 'Microsoft.AspNetCore.App', version '7.0.0' (x64)
im-svc  | .NET location: /usr/share/dotnet/
im-svc  |
im-svc  | No frameworks were found.
im-svc  |
im-svc  | Learn about framework resolution:
im-svc  | https://aka.ms/dotnet/app-launch-failed
im-svc  |
im-svc  | To install missing framework, download:
im-svc  | https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=7.0.0&arch=x64&rid=debian.11-x64

Мало того, я удалил любой код, который может быть выполнен, и оставил только ссылку на .dll и все ту же проблему.

Если я удалю ссылку из этой библиотеки, контейнер, в котором работает эта служба, будет работать, как и ожидалось.

FROM mcr.microsoft.com/dotnet/runtime:7.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["./Svc.InventoryManagement/Svc.InventoryManagement.csproj", "Svc.InventoryManagement/"]
RUN dotnet restore "Svc.InventoryManagement/Svc.InventoryManagement.csproj"
COPY . .
WORKDIR "/src/Svc.InventoryManagement"
RUN dotnet build "Svc.InventoryManagement.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Svc.InventoryManagement.dll"]

Ссылочная библиотека:

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

    <PropertyGroup>
        <TargetFramework>net7.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include = "Microsoft.EntityFrameworkCore" Version = "7.0.4" />
        <PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer" Version = "7.0.4" />
    </ItemGroup>

    <ItemGroup>
        <ProjectReference Include = "..\lib.Utils\lib.Utils.csproj" />
    </ItemGroup>

</Project>

Внутренняя ссылка

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

    <PropertyGroup>
        <TargetFramework>net7.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
        <FrameworkReference Include = "Microsoft.AspNetCore.App" />
    </ItemGroup>

    <ItemGroup>
        <PackageReference Include = "AutoMapper.Extensions.Microsoft.DependencyInjection" Version = "12.0.0" />
    </ItemGroup>

    <ItemGroup>
      <Folder Include = "EnumExtensions\" />
    </ItemGroup>

</Project>

Примечание. У меня есть API-интерфейс net7, который использует ту же библиотеку, и при работе в докере он работает, как и ожидалось.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
2
0
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что для вашего "Внутреннего" проекта требуется ASP.NET Core Runtime. Измените FROM mcr.microsoft.com/dotnet/runtime:7.0 AS base на FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base (@hub.docker) или удалите элемент FrameworkReference из соответствующего .csproj.

Другие вопросы по теме