ChatGPT解决这个技术问题 Extra ChatGPT

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

当我运行命令 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 RID: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。应用程序 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

K
Krzysztof Madej

对我来说,这发生在我的 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 那是上辈子的事了,我已经换工作了哈哈
S
Silent Kay

我遇到了这个问题,但我的 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)

在那之后,它工作得很好。


m
mybrave

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

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

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

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

Linux:案例,案例,案例。对于 Windows 开发人员来说,这很容易忘记。
S
Stephan Schoeman

我按照微软给出的.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 镜像,并创建了我的容器。在上述之后,我的容器和应用程序按预期运行。


u
user1785103

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


m
mwilson

就我而言,它是双引号后的空格:

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

删除后它起作用了。


a
ashilon

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


J
JBSnorro

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

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

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

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

R
Robotronx

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

...
FROM build AS publish
RUN dotnet publish  --configuration Release --output /dist

FROM base AS final
COPY --from=publish /dist .
...

D
Daniel Veihelmann

我遇到了同样的错误,事实证明,我不小心将容器的应用程序路径安装到了主机系统:

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅