#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. да, вам нужно будет создать контейнер, если вы добавите новые модули. или войдите в него и установите модуль вручную