【问题标题】:Error: It was not possible to find any installed .NET Core SDKs错误:找不到任何已安装的 .NET Core SDK
【发布时间】:2020-05-23 22:20:30
【问题描述】:

当我运行命令docker run -i -t myProject 时显示错误:

找不到任何已安装的 .NET Core SDK 您的意思是运行 .NET Core SDK 命令吗?从以下位置安装 .NET Core SDK: https://aka.ms/dotnet-download

但是,我确实安装了 .NET Core SDK,并且PATH 是正确的(在此处跟随:https://docs.microsoft.com/en-us/aspnet/core/test/troubleshoot?view=aspnetcore-3.1#no-net-core-sdks-were-detected)。

而且,我的项目只需要运行时 .NET Core SDK。

有谁知道可能是什么问题?

运行 dotnet --info 我得到了:

.NET Core SDK(反映任何 global.json): 版本:3.1.101 提交:b377529961

运行时环境: 操作系统名称:Windows 操作系统版本:10.0.18363 操作系统平台:Windows 摆脱:win10-x86 基本路径:C:\Program Files (x86)\dotnet\sdk\3.1.101\

主机(用于支持): 版本:3.1.1 提交:a1388f194c

.NET Core SDK 已安装: 3.1.101【C:\Program Files (x86)\dotnet\sdk】

.NET Core 运行时安装: Microsoft.AspNetCore.App 3.1.0 [C:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 3.1.1 [C:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.App] Microsoft.NETCore.App 3.1.0 [C:\Program Files (x86)\dotnet\shared\Microsoft.NETCore.App] Microsoft.NETCore.App 3.1.1 [C:\Program Files (x86)\dotnet\shared\Microsoft.NETCore.App] Microsoft.WindowsDesktop.App 3.1.0 [C:\Program Files (x86)\dotnet\shared\Microsoft.WindowsDesktop.App] Microsoft.WindowsDesktop.App 3.1.1 [C:\Program Files (x86)\dotnet\shared\Microsoft.WindowsDesktop.App]

要安装其他 .NET Core 运行时或 SDK: https://aka.ms/dotnet-download

【问题讨论】:

  • 你的 Dockerfile 是什么样的? ENTRYPOINT 命令是否引用了正确的路径?
  • 是的。刚刚解决它:在 dockerfile 我有 aspnetcore-runtime-2.0 但找不到那个版本。在我更改为 aspnetcore-runtime-2.2 后,它对我有用。
  • .NET Core 2.2 已于去年 12 月停止支持。您应该考虑升级到 3.1。请参阅hub.docker.com/_/microsoft-dotnet-core 了解最新支持的图像。

标签: docker .net-core


【解决方案1】:

对我来说,这发生在我的DOCKERFILE 中有错误的ENTRYPOINT

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "SampleAppForDocker.dll"]

确保在 ENTRYPOINT 中运行正确的 dll。我的 dll 文件名错误。

【讨论】:

  • "再次检查您要运行的内容。"是我永远不会忘记的圣人建议。
  • 如何知道正确的ENTRYPOINT dll 是什么?我的答案与此处的答案完全相同(SampleAppForDocker.dll 命名为其他名称除外)。然而,我仍然从这个 Stack Overflow 问题的标题中看到错误
  • 我将入口点更改为 ENTRYPOINT ["ls", "."],这让我可以查看目录中的所有文件并意识到我使用了不正确的 dll 名称
  • @PatNeedham 有点晚了,但要回答你的问题,在 .csproj 中应该有一个 AssemblyName 节点。那是生成的 DLL 的名称,也就是入口点 :-)
  • @MathieuVIALES 那是上辈子的事了,我已经换工作了哈哈
【解决方案2】:

就我而言,这是工作目录的问题。 在 Dockerfile 中,您应该在放置执行 dll 的同一工作目录中。如下 : Dockerfile

【讨论】:

    【解决方案3】:

    我遇到了这个问题,但我的 ENTRYPOINT 是正确的。问题在于过时或损坏的 mcr.microsoft.com/dotnet/core/sdk:3.1 图像。所以我清除了所有东西并重建了 docker 镜像。

    对于那些不知道的人,这是如何做到这一点的:

    Remove all docker containers: docker rm -f $(docker ps -a -q)
    Remove all docker images:     docker rmi -f $(docker images)
    

    之后,它工作正常。

    【讨论】:

      【解决方案4】:

      在我的情况下,它是双引号后的空格:

      ENTRYPOINT ["dotnet", " MyAssembly.dll"]
      

      删除后它起作用了。

      【讨论】:

        【解决方案5】:

        对我来说,我忘记将已发布的文件夹从构建步骤复制到最后一步。

        ...
        FROM build AS publish
        RUN dotnet publish  --configuration Release --output /dist
        
        FROM base AS final
        COPY --from=publish /dist .
        ...
        

        【讨论】:

          【解决方案6】:

          在我的情况下,它与 docker 无关。 web.config 中的“arguments”属性有错误,dll 的名称不正确。 HTH。

          【讨论】:

            【解决方案7】:

            我按照微软给出的.Net Core app tutorial,遇到了同样的问题。我将 docker 文件设置为:

            FROM mcr.microsoft.com/dotnet/aspnet:3.1
            COPY bin/release/netcoreapp3.1/publish/ App/
            WORKDIR /App
            ENTRYPOINT ["dotnet", "NetCore.Docker.dll"]
            

            但它并没有拉取 mcr.microsoft.com/dotnet/aspnet 图像作为我构建的基础(我假设,因为我还不是这方面的专家)。我对 aspnet 图像做了一个拉取请求:

            docker pull mcr.microsoft.com/dotnet/aspnet:3.1
            

            它创建了这个图像。然后我构建了我的项目的 docker 镜像,并创建了我的容器。完成上述操作后,我的容器和应用程序按预期运行。

            【讨论】:

              【解决方案8】:

              确保您的 dll 从发布位置复制到 /app。也许您的发布配置会覆盖它。

              正如@KarlGreen 所建议的,ENTRYPOINT ["ls", "."] 会显示 dll 是否实际复制到 /app 文件夹。在我的情况下不是,ls 只列出了web.configwwwroot。如果我改为发布 Debug 配置,则会复制 dll ,因此发布配置会有所不同,尽管我不确定具体是什么。 publish 命令的 output 选项未得到支持,但被我不知道的其他内容覆盖。

              我通过使用复制命令显式复制发布输出来解决它,例如

              COPY --from=build-env /app/bin/Release/netcoreapp3.1 .
              

              【讨论】:

                【解决方案9】:

                对于linux,区分大小写很重要。就我而言,问题出在(顺便说一句。它作为Windows 容器工作)

                ENTRYPOINT ["dotnet", "backendapi.dll"]
                

                因为库名是用不同的大小写写的。一旦入口点被正确命名为

                ,它就被修复了
                ENTRYPOINT ["dotnet", "BackendAPI.dll"]
                

                【讨论】:

                  【解决方案10】:

                  我遇到了同样的错误,结果是我不小心将容器的应用程序路径挂载到了主机系统:

                  # Dockerfile
                  # ...
                  WORKDIR /var/myapp
                  # ...
                  
                  # docker-compose.yml
                  services:
                    myapp:
                      // ...
                      volumes:
                        - /c/docker/myapp:/var/myapp     // <--- Had to be removed
                      ports:
                        - "80:5000"
                  

                  更改卷映射解决了该问题。

                  【讨论】:

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