【问题标题】:It was not possible to find any installed .NET Core SDKs找不到任何已安装的 .NET Core SDK
【发布时间】:2020-03-25 02:09:18
【问题描述】:

我正在尝试为我的示例 ASP.NET Core 3.1 应用构建一个 Docker 映像并运行一个容器,并且正在查看

找不到任何已安装的 .NET Core SDK

当我运行命令时

docker run --rm -it -p 8000:80 ppi

我的 Dockerfile 很简单:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
COPY publish/ ./
ENTRYPOINT ["dotnet", "sampleapp.dll"]

我正在将我的应用程序预先构建到 publish 文件夹中。我的文件夹结构如下:

root/
  source/
    SampleApp.csproj
    appsettings.json
    Startup.cs
    Program.cs
  publish/
    SampleApp.dll
    SampleApp.exe
    appsettings.json
    SampleApp.deps.json
    SampleApp.runtimeconfig.json
    web.config
  Dockerfile
  SampleApp.sln

我使用以下命令创建了图像

docker build -t ppi

我的示例应用没有问题,因为我可以使用以下命令在本地启动它

dotnet publish/sampleapp.dll

我在这里缺少什么?我一直在学习以下教程:

  1. Building .NET Docker Images
  2. dotnet-docket/samples/aspnetapp

【问题讨论】:

  • 您是否安装了 .NET Core 3.1 SDK?
  • 扩展@John的评论,SDK与redist(用户安装的)不同。两种不同的东西。

标签: c# docker asp.net-core .net-core


【解决方案1】:

总结回答:

此图像 mcr.microsoft.com/dotnet/core/aspnet:3.1 是一个 .NET 运行时。

创建 docker 镜像的推荐方法是复制 dotnet sdk 镜像中的代码。 并触发 docker 镜像中的所有构建命令。

一旦完成。您只需将发布文件夹复制到 dotnet 运行时映像(您正在使用的映像)。

如果您使用的是视觉工作室;使用 Add Docker Support 选项生成 Dockerfile。一切都应该像魅力一样发挥作用。

错误消息有点含糊,表示并非所有文件都用于运行应用程序。

您的 Dockerfile 应如下所示:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["myaspnetapp.csproj", ""]
RUN dotnet restore "./myaspnetapp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "myaspnetapp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "myaspnetapp.csproj" -c Release -o /app/publish

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,但不想使用 mcr.microsoft.com/dotnet/core/sdk:3.1-buster 映像构建应用程序。我发现在 Linux 容器 (bash) 中运行的 shell 区分大小写。

    在您的 Dockerfile 中,将 ENTRYPOINT ["dotnet", "sampleapp.dll"] 更改为 ENTRYPOINT ["dotnet", "SampleApp.dll"]

    在 Windows 10 上,任何一个命令都可以工作,因为那里的 shell 不区分大小写。

    “在我的机器上工作......”有人吗?

    【讨论】:

      【解决方案3】:

      在尝试运行已发布版本时,我在 Windows 上遇到此错误,即只是尝试使用运行时,而不是 sdk。

      我的解决方案是改变这个:

      dotnet sample
      

      到这里:

      dotnet sample.dll
      

      【讨论】:

        猜你喜欢
        • 2020-05-23
        • 1970-01-01
        • 2021-07-24
        • 2021-12-10
        • 1970-01-01
        • 2022-11-13
        • 1970-01-01
        • 2020-06-27
        • 1970-01-01
        相关资源
        最近更新 更多