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



我正在尝试为我的示例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. 构建.NET Docker镜像
  2. dotnet摘要/samples/spnetapp

摘要答案:

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

创建docker映像的推荐方法是将代码复制到dotnet-sdk映像中。并启动docker映像中的所有构建命令。

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

如果您使用的是visualstudio;使用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"]

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

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

在Windows 10上,由于外壳不区分大小写,因此任何一个命令都可以工作。

"在我的机器上工作"任何人

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

对我来说,解决方案是改变这一点:

dotnet sample

到此:

dotnet sample.dll

最新更新