Docker for net7 worker service在linux容器中运行失败

nhaq1z21  于 2023-04-11  发布在  Docker
关注(0)|答案(1)|浏览(215)

我有一个net7 worker服务,它可以按照模板中的默认实现正常工作。
我想让这个服务运行一个作业,并在sql server数据库中做一些事情。这是另一个库,当通过visual studio ide在我的主机上运行workerservice时,它没有任何抱怨。
但是,当我尝试构建图像时,图像会被buidl,但当我运行此图像时,我会得到

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>

注意:我有一个使用相同库的net7 API,当在docker中运行时,它会按预期运行。

q5lcpyga

q5lcpyga1#

看起来你的“Inner”项目需要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)或从相应的. csproj中删除FrameworkReference元素。

相关问题