当我运行命令 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
ENTRYPOINT
命令是否引用了正确的路径?
对我来说,这发生在我的 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
是正确的。问题在于过时或损坏的 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)
在那之后,它工作得很好。
在 linux
的情况下,区分大小写很重要。就我而言,问题出在(顺便说一句。它作为 Windows
容器工作)
ENTRYPOINT ["dotnet", "backendapi.dll"]
因为库名称是用不同的大小写写的。一旦入口点被正确命名为
ENTRYPOINT ["dotnet", "BackendAPI.dll"]
我按照微软给出的.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 镜像,并创建了我的容器。在上述之后,我的容器和应用程序按预期运行。
就我而言,它是双引号后的空格:
ENTRYPOINT ["dotnet", " MyAssembly.dll"]
删除后它起作用了。
就我而言,它与 docker 无关。 web.config 中的“arguments”属性有错误,dll 的名称不正确。 HTH。
确保将您的 dll 从发布位置复制到 /app
。也许您的发布配置会覆盖它。
正如@KarlGreen 所建议的,ENTRYPOINT ["ls", "."]
会显示 dll 是否实际复制到 /app
文件夹。在我的情况下不是,ls
只列出了 web.config
和 wwwroot
。如果我改为发布 Debug 配置,则会复制 dll ,因此发布配置会有所不同,尽管我不确定具体是什么。 publish
命令的 output
选项没有得到尊重,而是被我不知道的其他东西覆盖。
我通过使用复制命令显式复制发布输出来解决它,例如
COPY --from=build-env /app/bin/Release/netcoreapp3.1 .
对我来说,我忘记将发布的文件夹从构建步骤复制到最后一步。
...
FROM build AS publish
RUN dotnet publish --configuration Release --output /dist
FROM base AS final
COPY --from=publish /dist .
...
我遇到了同样的错误,事实证明,我不小心将容器的应用程序路径安装到了主机系统:
# Dockerfile
# ...
WORKDIR /var/myapp
# ...
# docker-compose.yml
services:
myapp:
// ...
volumes:
- /c/docker/myapp:/var/myapp // <--- Had to be removed
ports:
- "80:5000"
更改卷映射解决了该问题。
不定期副业成功案例分享
ENTRYPOINT
dll?我的答案与此处的答案完全相同(SampleAppForDocker.dll
命名为其他名称除外)。然而,我仍然从这个 Stack Overflow 问题的标题中看到错误ENTRYPOINT ["ls", "."]
,这使我可以查看目录中的所有文件并意识到我使用了不正确的 dll 名称AssemblyName
节点。那是生成的 DLL 的名称,即入口点 :-)