ОБНОВЛЕНИЕ от 24 июля 2019 года смотрите в конце статьи.
ОБНОВЛЕНИЕ от 01.11.2018 { Благодаря помощи в комментариях ниже представлен более идеологически правильный вариант файла docker. В стандартном проекте шаблона Angular SPA обнаружена ошибка.
Разработчики в версии net .
core 2.1. удален из образа microsoft/dotnet:2.1-sdk, использовавшегося для сборки nodejs, но код, использующий его, остался в файле проекта.
Более подробная информация здесь github.com/aspnet/Announcements/issues/298 Вам необходимо вручную отредактировать файл проекта *.
csproj, удалив следующий код. Код для удаления из *.
csproj
Правильный файл докеров<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish"> <!-- As part of publishing, ensure the JS resources are freshly built in production mode --> <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" /> <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" /> <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod" Condition=" '$(BuildServerSideRenderer)' == 'true' " /> <!-- Include the newly-built files in the publish output --> <ItemGroup> <DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" /> <DistFiles Include="$(SpaRoot)node_modules\**" Condition="'$(BuildServerSideRenderer)' == 'true'" /> <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)"> <RelativePath>%(DistFiles.Identity)</RelativePath> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </ResolvedFileToPublish> </ItemGroup> </Target>
ARG NODE_IMAGE=node:8.12
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["AngularWebApp/AngularWebApp.csproj", "AngularWebApp/"]
RUN dotnet restore "AngularWebApp/AngularWebApp.csproj"
COPY .
.
WORKDIR "/src/AngularWebApp"
FROM ${NODE_IMAGE} as node-build
WORKDIR /src
COPY AngularWebApp/ClientApp .
RUN npm install
RUN npm run build -- --prod
FROM build AS publish
RUN dotnet publish "AngularWebApp.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
COPY --from=node-build /src/dist .
/ClientApp/dist
ENTRYPOINT ["dotnet", "AngularWebApp.dll"]
} К сожалению, готового решения мне нигде не удалось найти.
Мне пришлось собирать информацию из нескольких источников.
Чтобы запустить приложение в докере Angular 6/7 как проект ASP .
NET Core. Если мы включим поддержку Docker для проекта с приложением Angular стандартными средствами, файл Docker создаст образ приложения на основе образа microsoft/dotnet:2.1-aspnetcore-runtime. Этот базовый образ не включает сервер node.js. И результаты выполнения отобразят ошибку ASP .
NET Core. An unhandled exception occurred while processing the request.
The NPM script ‘start’ exited without indicating that the Angular CLI was listening for requests
Чтобы устранить эту ошибку, вам необходимо обновить файл Docker, добавив node.js и установку angular.
Кроме того, поскольку разработка ведется под Windows, и все это запускается в Docker-контейнере на базе Ubuntu, то если используются файлы стилей scss или sass, то они компилируются Angular CLI с использованием node-sass, и при запуске выдает ошибка «Node Sass еще не поддерживает вашу текущую среду: 64-разрядную версию Windows с неподдерживаемой средой выполнения».
Вам необходимо выполнить команду: npm rebuild node-sass
npm загрузит необходимые скрипты для текущей платформы и пересоберет CSS-файлы.
Окончательный файл Docker для приложения Angular, основанного на проекте ASP .
NET Core 2.1, выглядит следующим образом.
FROM microsoft/ dotnet:2.1-aspnetcore-runtime AS base
# Setup NodeJs
RUN apt-get update && \
apt-get install -y wget && \
apt-get install -y gnupg2 && \
wget -qO- https://deb.nodesource.com/setup_8.x | bash - && \
apt-get install -y build-essential nodejs
RUN npm install @angular/cli -g
# End setup
WORKDIR /app
EXPOSE 80
FROM microsoft/ dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["AngularWebApp/AngularWebApp.csproj", "AngularWebApp/"]
RUN dotnet restore "AngularWebApp/AngularWebApp.csproj"
COPY .
.
WORKDIR "/src/AngularWebApp" RUN dotnet build "AngularWebApp.csproj" -c Release -o /app FROM build AS publish RUN dotnet publish "AngularWebApp.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app .
WORKDIR /app/ClientApp
RUN npm install
RUN npm rebuild node-sass
WORKDIR /app
ENTRYPOINT ["dotnet", "AngularWebApp.dll"]
Я использовал стабильную версию LTS Node.js, на данный момент 8.x, но вы можете сменить ее на любую более актуальную.
Кроме того, еще отмечу, что Windows прощает ошибки, связанные с разным регистром символов, а вот Linux этого не прощает. А проект, работавший во время разработки, откажется компилироваться в контейнере, выдав ошибку docker ERROR in error TS1149: File name 'filename.ts' differs from already included file name 'FileNames.ts' only in casing
Чтобы избежать подобных ошибок на этапе компиляции, рекомендую добавить соответствующую опцию «forceConsistentCasingInFileNames»: true в файл tsconfig.json в разделе compilerOptions. {
"compilerOptions": {
"forceConsistentCasingInFileNames": true
}
}
}
ОБНОВЛЕНИЕ от 24.07.2019 {
Еще раз, спасибо за помощь в комментариях ниже оптимизированная версия докер-файла.
Оптимизированный файл докеров ARG NODE_IMAGE=node:10.16.0
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["AngularWebApp/AngularWebApp.csproj", "AngularWebApp/"]
RUN dotnet restore "AngularWebApp/AngularWebApp.csproj"
COPY .
.
WORKDIR "/src/AngularWebApp" RUN dotnet build "AngularWebApp.csproj" -c Release -o /app RUN dotnet publish "AngularWebApp.csproj" -c Release -o /app FROM ${NODE_IMAGE} as node-build WORKDIR /src COPY AngularWebApp/ClientApp .
RUN npm install RUN npm rebuild node-sass RUN npm run build -- --prod FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base WORKDIR /app EXPOSE 80 COPY --from=build /app .
COPY --from=node-build /src/dist .
/ClientApp/dist
ENTRYPOINT ["dotnet", "AngularWebApp.dll"]
}
angular, angular6/7, asp.net core 2.1, докер
Теги: #docker #.
NET #angular #angular 6 #asp .
net core 2.1
-
Почему Рубисты Так Злятся?
19 Oct, 24 -
Так Пузыри Лопаются?
19 Oct, 24 -
Уголок Спикеров Ciklum Php В Виннице 19 Июня
19 Oct, 24