无法运行 Docker .NET 6 控制台映像

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

嗨,我有以下 .NET 6 控制台应用程序的 dockerfile

FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["MyProj/MyProj.csproj", "MyProj/"]
RUN dotnet restore "MyProj/MyProj.csproj"
COPY . .
WORKDIR "/src/MyProj"
RUN dotnet build "MyProj.csproj" -c Release -o /app/build

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

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

我正在使用 github actions CI 工具构建镜像并将其部署在 kubernets 中。我在构建时没有收到任何错误,但当图像运行时,我收到以下错误

You must install or update .NET to run this application.

App: /app/AL.AlphaLinerJob.dll
Architecture: x64
Framework: 'Microsoft.AspNetCore.App', version '6.0.0' (x64)
.NET location: /usr/share/dotnet/

No frameworks were found.

Learn about framework resolution:
https://aka.ms/dotnet/app-launch-failed

To install missing framework, download:
https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=6.0.0&arch=x64&rid=debian.11-x64

下面是csproj包

<ItemGroup>
        <PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
        <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
        <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="7.0.0" />
        <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="7.0.0" />
        <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
        <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0" />
        <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
        <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0" />
        <PackageReference Include="Npgsql" Version="7.0.2" />
        <PackageReference Include="OpenTelemetry" Version="1.3.0-rc.2" />
        <PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.1.0" />
        <PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.1.0" />
        <PackageReference Include="OpenTelemetry.Exporter.Prometheus" Version="1.3.0-rc.2" />
        <PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.0.0-rc9" />
        <PackageReference Include="prometheus-net" Version="7.0.0" />
        <PackageReference Include="prometheus-net.AspNetCore" Version="7.0.0" />
        <PackageReference Include="Npgsql" Version="7.0.2" />

我无法找到其根本原因。几天前它工作正常,突然开始出现此错误。有人可以帮我找到根本原因吗?任何帮助将不胜感激。

我希望能够成功运行该映像。

c# docker asp.net-core console-application .net-6.0
3个回答
20
投票

更改第一行:

FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base


FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base


2
投票

其中一个包似乎依赖于存在的 ASP.NET Core 运行时(基于 csproj

 中的 
prometheus-net.AspNetCore
<FrameworkReference Include="Microsoft.AspNetCore.App" />
将是主要候选者)。

要么将

base
更改为
FROM mcr.microsoft.com/dotnet/aspnet:6.0
,要么找到“有罪”包并将其删除。

可能相关 - 未找到框架“Microsoft.AspNetCore.App”,版本“6.0.0”(x64)


0
投票

我解决了这个问题:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
...
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build

当我使用不同的配置时,我面临一个事实 - 构建存在于代码

1
中,没有任何细节。第一次我以为是因为选择不正确
sdk
...
aspnet
等。但经过调查,我发现:
C:\Users\<UserName>\AppData\Local\Temp\tmp7082
.tmp 有详细信息。问题实际上是 1
projectA
引用了另一个
projectB
,但是两者都有
appsettings.json
,并且构建过程由于这种冲突而失败(1 个路径中有 2 个同名文件)

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