Настройка Dockerfile для Angular-проекта ASP.NET Core 2.1

Я новичок в Docker и в настоящее время пытаюсь создать ASP.NET Core 2.1 с проектом Angular. Я использую контейнер Linux в Docker для Windows, и моя IDE - это версия сообщества VS2017.

В настоящее время я получаю эту ошибку:

[1] Убедитесь, что 'npm' установлен и находится в одном из каталогов PATH. Текущая переменная среды PATH: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin Убедитесь, что исполняемый файл находится в одном из этих каталогов, или обновите свой PATH .

Я считаю, что мне нужно установить Node.js в моем экземпляре Docker или как вы это называете, и это должно быть через Dockerfile. Укажите, пожалуйста, на мои ошибки в моем предположении. И как гарантировать, что зависимости будут установлены независимо от того, какой контейнер я использую? Ожидаю, что мои будущие проекты будут установлены на разных платформах.


person eSPiYa    schedule 14.06.2018    source источник
comment
Какое именно изображение вы используете?   -  person Ignacio Millán    schedule 14.06.2018
comment
@ IgnacioMillán, как это проверить? Спасибо   -  person eSPiYa    schedule 14.06.2018


Ответы (3)


В образе контейнера microsoft / dotnet: 2.1-aspnetcore-runtime не установлен npm / nodejs. Чтобы установить это в контейнере, обновите файл докера.

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_6.x | bash - && \
    apt-get install -y build-essential nodejs
# End setup

WORKDIR /app
EXPOSE 80

Только живая перезагрузка Angular CLI не работает.

person Marcel    schedule 15.06.2018
comment
Я видел это раньше на Github, но я понятия не имею, куда мне поместить этот код. Спасибо, что указали, где я должен это разместить. Хотя я изменил setup_6.x на setup_10.x, потому что на моем компьютере установлен Node.js v10. Сейчас он работает. Еще раз спасибо! - person eSPiYa; 17.06.2018
comment
Вам также может потребоваться добавить код для установки узла во втором контейнере, т.е. after: FROM microsoft/dotnet:2.1-sdk AS build Если вы получаете сообщения, похожие на "Ошибка сборки модуля: ошибка: Отсутствует привязка /src/myapp.UI/ClientApp/node_modules/node-sass/ ..", попробуйте добавить следующее: FROM build AS publish WORKDIR /src/myapp.UI/ClientApp RUN npm rebuild node-sass --force WORKDIR /src/myapp.UI RUN dotnet publish myapp.UI.csproj -c Release -o /app - person SteveC; 01.08.2018
comment
@Marcel есть ли способ заставить работать перезагрузку в реальном времени? - person lcssanches; 21.03.2019

Поскольку публикация происходит на основе образа microsoft / dotnet: 2.1-sdk. Итак, этот базовый образ содержит только dotnet sdk, но не npm, установивший этот базовый образ. Для решения этой проблемы есть 2 шага:

1) Добавление установки nodejs в существующую dotnet: 2.1-sdk, как написано в ответе @Marcel.

or

2) Вы можете добавить дополнительный шаг в Dockerfile для создания внешнего интерфейса на основе образа NODE и сборки ваш Angular. После успешной сборки вы получите сгенерированные файлы внешнего интерфейса и скопируете их в образ во время выполнения на последнем этапе. Таким образом, вы не будете добавлять какую-либо установку в dotnet sdk с этой опцией, а с одним Dockerfile с несколькими этапами вы будете отдельно строить серверную часть и сайт внешнего интерфейса.

Если вы хотите сделать это вторым вариантом, перейдите по ссылке ниже для создания внешнего интерфейса в Dockerfile отдельно от ASP.NET Core в том же файле Docker:

Dockerize приложение Angular ASP.NET Core (ошибка решения: команда« npm install »завершилась с кодом 127.)

person Alakbar    schedule 11.01.2019

Вместо установки NPM и Node.js в базовый образ вы также можете выбрать базовый образ с предустановленными фреймворками. Вы можете использовать мой образ dotnet-angular, который общедоступен на hub.docker.com . Просто замените

FROM microsoft/dotnet:2.2-sdk AS build

с участием

FROM mjibrandl/dotnetcore-angular:latest AS build

Также посмотрите мою статью: Настройка конвейера YAML Azure DevOps для публикации контейнера докеров .NET Core Angular 7 в реестре контейнеров Azure

person Martin Brandl    schedule 11.03.2019