Docker сетевой узел живой перезагрузки / angular приложение - PullRequest
0 голосов
/ 07 августа 2020

Я все еще новичок в docker и в настоящее время экспериментирую с созданием среды разработки. Я также создал сеть docker, чтобы добавить три услуги. У меня есть:

  • An angular приложение
  • An express приложение
  • изображение mongodb

My docker следующие файлы:

Dockerfile для express приложения

FROM node:12.0.0

ENV PORT=3000

COPY . /var/www
WORKDIR /var/www

RUN npm install

EXPOSE $PORT

ENTRYPOINT ["npm", "run", "start.dev"]

Dockerfile для angular приложения

### STAGE 1: Build ###
FROM node:12.0.0

WORKDIR /app

COPY package.json ./


# COPY package.json package-lock.json ./

RUN npm install
COPY . .

EXPOSE 4200

CMD npm start

docker -compose.yml

version: '3'

services:

  express-app:
    build:
      context: ./auth-app
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    networks:
      - docker-network

  mongodb:
    image: mongo
    networks:
      - docker-network

  angular-app:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "4200:4200"
    volumes:
      - "/frontend/node_modules"
      - ".:/frontend"
    networks:
      - docker-network

networks:
  docker-network:
    driver: bridge

Angular пакет приложения. json

  "scripts": {
    "ng": "ng",
    "start": "ng serve --host 0.0.0.0 --poll",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },

Express пакет приложения. json

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start.dev": "nodemon -L src/app.ts"
  },

docker журналы для angular контейнера enter image description here

docker logs for express container введите описание изображения здесь

При запуске «docker compose build» и «docker compose up» ошибок нет. Но горячая перезагрузка не работает при изменении исходного кода.

Я пробовал приложение angular, создав том docker, а приложение express не имеет тома docker.

Не могли бы вы помочь?

Спасибо.

1 Ответ

0 голосов
/ 07 августа 2020

Скорее всего, было бы целесообразно обновить ваш вопрос с помощью файлов журналов для обоих ваших контейнеров, что поможет людям помочь в дальнейшем, если журналы выдают конкретную c angular ошибку.

Если это связано со спецификацией c Angular настройки (папка / конфигурации и c), другие пользователи могут посоветовать дополнительные.

Без файлов журнала это людям будет очень сложно помочь.

Это будет список для руководства / устранения неполадок конфигурации Docker, и, скорее всего, он не станет конкретным ответом, связанным с вашей проблемой. Я советую использовать c некоторые команды docker -compose и docker (так что некоторые из них вы, возможно, уже пробовали).

  1. Когда вы говорите 'горячая перезагрузка ', вы имеете в виду, что вы компилируете приложение angular или пытаетесь перезагрузить контейнеры Docker? Есть разница между docker-compose down/up и docker-compose stop/start. Как вы знаете, up создает контейнеры, поэтому не пытайтесь использовать down, потому что он удалит контейнеры. Запуск / остановка с помощью других команд.

  2. Первое, с чего нужно начать, - это просмотреть журналы для текущих созданных контейнеров: - docker logs container_name1 (По умолчанию docker -compose добавляет имя текущей папки, в которой находится файл docker -compose.yml, как часть новых имен контейнеров) . См. docker-compose ps (вы используете его в docker -compose.yml или вложенных папках), чтобы увидеть имена созданных контейнеров для этого экземпляра и статусы.

  3. Порты могут быть заблокированы брандмауэром , так что позаботьтесь об этом и откройте для своей ОС. Убедитесь, что порты, обозначенные docker-compose ps, действительно отображают port 3000, 4200.

  4. Ваши тома кажутся новым пустым безымянным томом /frontend/node_modules и привязать mount , беря текущий контекст ie: ./frontend и монтируя его в /frontend. Было ли это вашим намерением?

    Я ничего не знаю о angular, но должен ли node_modules быть пустым в новом контейнере? Планируете ли вы добавлять / устанавливать модули узлов внутри контейнера после запуска приложений? Это полезно только до тех пор, пока вы не захотите перестроить изображения. После дальнейшего тестирования контейнеров * отметьте модули, которые вы хотите установить, и попытайтесь выполнить команды Dockerfile RUN для соответствующей установки модулей. Это также, скорее всего, означало бы, что ваш контент node_modules должен быть Dockerfile ADD ed вместо того, чтобы создавать для них том. Я предполагаю, что package. json содержит описания модулей, которые будут установлены один раз внутри контейнера?

    Ваши постоянные данные приложения, которые вы хотите поддерживать внешне / внутренне с вашим bind-mount I Думаю, настроен правильно (похоже, доступ к нему /frontend).

  5. Если ваши приложения работают правильно до «горячего перезапуска», обращались ли вы к созданным контейнерам, чтобы увидеть содержимое и посмотрите, правильно ли выглядят папки / журналы и т. д. c? Запустите docker exec -ti container_name bash (контейнер Ubuntu в качестве примера) и перейдите внутрь.

...