Запуск npm скрипта в Dockerfile перед сборкой tnet - PullRequest
1 голос
/ 27 мая 2020

У меня есть. NET Core веб-приложение, которое я Dockerize для тестирования. В этом приложении я использую webpack и npm Task Runner для автоматизации компиляции моих файлов SASS. Однако я не могу заставить это работать с Dockerfile. Мой Dockerfile выглядит так:

FROM mcr.microsoft.com/dotnet/core/aspnet:latest AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:latest AS build
WORKDIR /src
COPY . .
RUN dotnet restore "Project.csproj"
RUN dotnet build "Project.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish -c Release -o /app/publish

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

Я пробовал и apt-get, и FROM node:lts, и npm run build, но ни один из них не увенчался успехом. Либо узел сломается, либо dotnet restore сломается. У кого-нибудь есть идеи?

РЕДАКТИРОВАТЬ: Когда я пробовал FROM node:lts

FROM mcr.microsoft.com/dotnet/core/aspnet:latest AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM node:lts AS node
WORKDIR /src
COPY . .
RUN npm install
RUN npm run build

FROM mcr.microsoft.com/dotnet/core/sdk:latest AS build
RUN dotnet restore "Project.csproj"
RUN dotnet build "Project.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish -c Release -o /app/publish

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

Это дает мне ошибку package.json not found. Если я специально введу COPY package*.json ./, то dotnet restore выдаст ошибку Project.csproj not found.

Когда я попробовал apt-get install

FROM mcr.microsoft.com/dotnet/core/aspnet:latest AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:latest AS build
WORKDIR /src
COPY . .
RUN 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
RUN npm install
RUN dotnet restore "Project.csproj"
RUN dotnet build "Project.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish -c Release -o /app/publish

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

Он бы сказал npm is not a recognized command.

1 Ответ

4 голосов
/ 27 мая 2020

Поскольку вы используете многоступенчатую сборку, и вы просто скопировали на одном этапе, а не на других, вот почему 1 или другой этап ломается. Проверьте ниже Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:latest AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM node:lts AS node
WORKDIR /src
COPY . .
RUN npm install
RUN npm run build

FROM mcr.microsoft.com/dotnet/core/sdk:latest AS build
COPY . .
RUN dotnet restore "Project.csproj"
RUN dotnet build "Project.csproj" -c Release -o /app/build

FROM build AS publish
COPY . .
RUN dotnet publish -c Release -o /app/publish

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

...