我正在尝试为我的示例ASP.NET Core 3.1应用构建一个Docker镜像并运行一个容器,并且看到
It was not possible to find any installed .NET Core SDKs
当我运行命令时
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
我在这里想念什么?我一直在研究以下教程:
最佳答案
简要答案:
该图像mcr.microsoft.com/dotnet/core/aspnet:3.1
是.NET运行时。
建议的创建docker镜像的方法是将代码复制到dotnet sdk镜像内。
并在docker镜像中触发所有构建命令。
一旦完成。您只将发布文件夹复制到一个dotnet运行时镜像(您正在使用的那个)。
如果您使用的是Visual Studio;使用添加Docker支持选项来生成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"]
关于c# - 找不到任何已安装的.NET Core SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60842092/