Почему мой том docker-compose не обнаруживает изменений

#node.js #docker #docker-compose #nestjs

Вопрос:

Я изучаю докер и докер-сочиняю, у меня есть приложение VueJS и api nestjs, которые я пытаюсь докеризировать

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

Docker-compose.yml (в другом каталоге)

 services:
  front:
    build: ../ecommerce-front # I tried to add :/app but my container doesn't find app/package.json
    ports: 
        - "8080:8080"
    volumes: 
      - ../ecommerce-front/src
    
  back:
    build: ../ecommerce-back
    ports:
        - "3000:3000"
    depends_on: 
      - mysql
    volumes: 
      - ../ecommerce-back/src
  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: tools
      MYSQL_PASSWORD: root
 

внутренний файл докера:

 FROM node:14 AS builder
WORKDIR /app
COPY ./package*.json ./
RUN npm install
COPY . .
RUN npm run build


FROM node:10-alpine
WORKDIR /app
COPY --from=builder /app ./
CMD ["npm", "run", "start:dev"]
 

у меня нет ошибок, мои службы работают хорошо, но когда я вношу некоторые изменения в свою спину, в контейнере ничего не меняется

Что я сделал не так ?

Заранее благодарю

Комментарии:

1. ваши файлы на хосте монтируются в контейнер или вы разрабатываете в контейнере? также, что делает скрипт start:dev? Я предполагаю, что nodemon или что-то подобное?

2. локальный проект находится на моем компьютере и запускается:dev просто запустите проект после запуска npm build «:dev» добавьте —watch в начало гнезда

3. раньше я не касался vue, но я предполагаю, что он использует webpack на бэкэнде. в любом случае… чтобы смонтировать том для разработки на хосте, попробуйте добавить файл компоновки, чтобы тома были смонтированы в соответствии с форматом hostdir:containerdir

4. при этом вы, скорее всего, столкнетесь с проблемами с модулями узлов, поэтому вам также потребуется использовать том docker для их защиты при монтировании файлов хоста. просто добавьте строку под монтированием тома, что-то вроде - /container/path/to/node_modules

Ответ №1:

Благодаря ричардсефтону, похоже, мне нужно было добавить node_modules в качестве объема к двум моим сервисам, подобным этому:

  volumes: 
      - ../ecommerce-front:/app
      - '/app/node_modules'
    volumes: 
      - ../ecommerce-back:/app
      - '/app/node_modules'

 

Комментарии:

1. Это явная директива Docker о том, что node_modules каталог содержит пользовательские данные, которые необходимо сохранять при перезапуске контейнера, и изменения в базовом изображении следует игнорировать. Это приведет к тому, что ваш контейнер будет игнорировать изменения в package.json файле.

2. да, вам нужно будет создать контейнер, если вы добавите новые модули. или войдите в него и установите модуль вручную