How to integrate 'npm install' into ASP.NET CORE 2.1 Docker build
Found the solution:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS baseWORKDIR /appEXPOSE 80FROM microsoft/dotnet:2.1-sdk AS buildWORKDIR /srcCOPY --from=frontend . .COPY ["myProject.WebUi/myProject.WebUi.csproj", "myProject.WebUi/"]COPY ["myProject.SearchIndex/myProject.SearchIndex.csproj", "myProject.SearchIndex/"]COPY ["myProject.SearchIndex.Common/myProject.SearchIndex.Common.csproj", "myProject.SearchIndex.Common/"]RUN dotnet restore "myProject.WebUi/myProject.WebUi.csproj"COPY . .WORKDIR "/src/myProject.WebUi"RUN apt-get update -yq && apt-get upgrade -yq && apt-get install -yq curl git nanoRUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && apt-get install -yq nodejs build-essentialRUN npm install -g npmRUN npm installRUN dotnet build "myProject.WebUi.csproj" -c Release -o /appFROM build AS publishRUN dotnet publish "myProject.WebUi.csproj" -c Release -o /appFROM base AS finalWORKDIR /appCOPY --from=publish /app .ENTRYPOINT ["dotnet", "myProject.WebUi.dll"]
Update for ASP.NET Core 3.0 Web App with SPA
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS buildWORKDIR /app# Prevent 'Warning: apt-key output should not be parsed (stdout is not a terminal)'ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1# install NodeJS 13.x# see https://github.com/nodesource/distributions/blob/master/README.md#debRUN apt-get update -yq RUN apt-get install curl gnupg -yq RUN curl -sL https://deb.nodesource.com/setup_13.x | bash -RUN apt-get install -y nodejs# copy csproj and restore as distinct layersCOPY *.sln .COPY MyApplication/*.csproj ./MyApplication/RUN dotnet restore# copy everything else and build appCOPY MyApplication/. ./MyApplication/WORKDIR /app/MyApplicationRUN dotnet publish -c Release -o outFROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtimeWORKDIR /appCOPY --from=build /app/MyApplication/out ./ENTRYPOINT ["dotnet", "MyApplication.dll"]
Then
docker build --pull -t MyApplicationdocker run --name myapp --rm -it -p 8000:80 MyApplication
The app will be available at localhost:8000
.
In my case, I needed to have a docker image running a nodeJS project which is able to execute script like "dotnet xxx.xxx.dll".
I was struggling trying to fix "dotnet command not found" inside my docker.
I succeeded to fix it easily by adding at the beginning of my Dockerfile
:
FROM node:alpine AS node_baseFROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-envCOPY --from=node_base . .RUN echo "NODE Version:" && node --versionRUN echo "NPM Version:" && npm --versionRUN echo "dotnet Version:" && dotnet --version
(you can adjust versions accordingly)
I took inspiration from this github issue.
Hope this trick can help you too :)