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

Wil*_*ode 1 c# docker .net-core asp.net-core

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

找不到任何已安装的 .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"]
Run Code Online (Sandbox Code Playgroud)

我正在将我的应用程序预构建到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
Run Code Online (Sandbox Code Playgroud)

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

docker build -t ppi

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

dotnet publish/sampleapp.dll

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

  1. 构建 .NET Docker 镜像
  2. dotnet-docket/samples/aspnetapp

Zia*_*han 7

总结回答:

此映像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"]
Run Code Online (Sandbox Code Playgroud)