.Net core角模板dockerfile错误

.Net core角模板dockerfile错误,docker,.net-core,visual-studio-2017,Docker,.net Core,Visual Studio 2017,我正在尝试使用visual studio 2017中的.net core angular spa模板创建图像。我一直收到npm错误127。尽管我可以看到npm run build命令正在执行,并且它已经通过了这个步骤。我尝试在构建开始时在映像上安装节点。那里也没有成功。 这就是我的dockerfile的样子 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mi

我正在尝试使用visual studio 2017中的.net core angular spa模板创建图像。我一直收到npm错误127。尽管我可以看到npm run build命令正在执行,并且它已经通过了这个步骤。我尝试在构建开始时在映像上安装节点。那里也没有成功。 这就是我的dockerfile的样子

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["AngularNetCoreDockerApp/AngularNetCoreDockerApp.csproj", "AngularNetCoreDockerApp/"]
RUN dotnet restore "AngularNetCoreDockerApp/AngularNetCoreDockerApp.csproj"
COPY . .
WORKDIR "/src/AngularNetCoreDockerApp"
RUN dotnet build "AngularNetCoreDockerApp.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "AngularNetCoreDockerApp.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "AngularNetCoreDockerApp.dll"]

这最终与dockerfile有关。最后我用了这个

FROM microsoft/dotnet:2.1.301-sdk AS builder
WORKDIR /source

RUN curl -sL https://deb.nodesource.com/setup_10.x |  bash -
RUN apt-get install -y nodejs

COPY *.csproj .
RUN dotnet restore

COPY ./ ./

RUN dotnet publish "./angular-app.csproj" --output "./dist" --configuration Release --no-restore

FROM microsoft/dotnet:2.1.1-aspnetcore-runtime
WORKDIR /app
COPY --from=builder /source/dist .
EXPOSE 80
ENTRYPOINT ["dotnet", "angular-app.dll"]

找到了答案

我最终将构建分为多个阶段

首先,我从*.csproj文件中删除了目标PublishRunWebpack,以确保该应用程序不会在发布期间生成spa

之后,我的Dockerfile如下所示:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM node:latest AS node-packages
WORKDIR /web
COPY "ProjectFolder/ClientApp/package.json" .
COPY "ProjectFolder/ClientApp/package-lock.json" .
RUN npm install

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS dotnet-packages

WORKDIR /src
COPY ["ProjectFolder/ProjectFile.csproj", "ProjectFolder/"]
RUN dotnet restore "ProjectFolder/ProjectFile.csproj"

FROM node-packages AS node-build
WORKDIR /web
COPY ProjectFolder/ClientApp .
RUN npm run build --prod

FROM dotnet-packages AS dotnet-build
WORKDIR /src
COPY . .
WORKDIR "/src/ProjectFolder"
RUN dotnet build "ProjectFile.csproj" -c Release -o /app/build
RUN dotnet publish "ProjectFile.csproj" -c Release -o /app/publish

FROM node-build AS node-publish
FROM dotnet-build AS dotnet-publish

FROM base AS final
WORKDIR /app
COPY --from=dotnet-publish /app/publish .
WORKDIR /app/ClientApp/dist
COPY --from=node-publish /web/dist .

WORKDIR /app
ENTRYPOINT ["dotnet", "ProjectFile.dll"]