Node.js docker контейнер не обновляется до изменений в объеме - PullRequest
4 голосов
/ 12 февраля 2020

Я пытаюсь разместить среду разработки на моей машине Windows, на которой размещены внешний и внутренний контейнеры. До сих пор я работал только над бэкэндом. Все файлы находятся на диске C, доступ к которому осуществляется через рабочий стол Docker.

У меня есть следующий docker -компонентный файл и Dockerfile, последний находится внутри каталога с именем backend в каталоге root.

Dockerfile:

FROM node:12.15.0-alpine

WORKDIR /usr/app

COPY package*.json ./

RUN npm install

EXPOSE 5000

CMD [ "npm", "start" ]

docker -compose.yml:

version: "3"
services:
  backend:
    container_name: backend
    build:
        context: ./backend
        dockerfile: Dockerfile
    volumes:
      - ./backend:/usr/app
    environment:
      - APP_PORT=80
    ports:
      - '5000:5000'

  client:
    container_name: client
    build:
      context: ./client
      dockerfile: Dockerfile
    volumes:
      - ./client:/app
    ports:
      - '80:8080'

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

Я работал с Docker в PHP приложениях раньше, и в основном сделали то же самое. Поэтому я не уверен, почему это не работает с приложением Node.js. Я задаюсь вопросом, не упускаю ли я что-то явно очевидное в отношении того, почему это не работает.

Буду признателен за любую помощь.

1 Ответ

3 голосов
/ 12 февраля 2020

Разница между узлом и PHP заключается в том, что php обычно автоматически принимает изменения файловой системы, а сервер узла - нет.

Я думаю, вы увидите, что изменения файла выбираются вверх, если вы перезапустите узел, отскочив от контейнера с помощью docker -составить, а затем вверх (не нужно перестраивать вещи!).

Если вы хотите, чтобы узел принимал изменения файловой системы, не отсекая сервер, который вы можно использовать некоторые инструменты узла. nodemon один: https://www.npmjs.com/package/nodemon. Следуйте инструкциям по установке для локальной установки и обновите сценарий запуска, чтобы использовать nodemon вместо node.

Кроме того, я действительно считаю, что в вашем файле Docker есть ошибка, и вам нужно скопировать исходный код в рабочий каталог. Я предполагаю, что вы получили свой первоначальный рецепт отсюда: https://dev.to/alex_barashkov/using-docker-for-nodejs-in-development-and-production-3cgp. Это docker файл ниже. Вы пропустили шаг!

FROM node:10-alpine

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install

COPY . .

CMD [ "npm", "start" ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...