Я пытаюсь запустить Node.js в контейнере Docker через Docker Compose.
node_modules
должен быть создан в образе, а исходный код должен быть синхронизирован с хоста.
Поэтому я использую 2 тома в docker-compose.yml. Один для моего проекта источника и другой для node_modules
в изображении.
Кажется, все работает. node_modules
установлены и nodemon
запускает приложение. В моем Docker-контейнере у меня есть папка node_modules
со всеми зависимостями. На моем хосте создается пустой node_modules
(я не уверен, ожидается ли это).
Но, когда я меняю файл из проекта. Процесс nodemon
обнаруживает изменение файла и перезапускает приложение. Теперь приложение вылетает, потому что не может найти модули. Папка node_modules
в контейнере Docker теперь пуста.
Что я делаю не так?
Структура моей папки выглядит следующим образом
/
├── docker-compose.yml
├── project/
│ ├── package.json
│ ├── Dockerfile
докер-compose.yml
version: '3'
services:
app:
build: ./project
volumes:
- ./project/:/app/
- /app/node_modules/
Проект / Dockerfile
# base image
FROM node:9
ENV APP_ROOT /app
# set working directory
RUN mkdir $APP_ROOT
WORKDIR $APP_ROOT
# install and cache app dependencies
COPY package.json $APP_ROOT
COPY package-lock.json $APP_ROOT
RUN npm install
# add app
COPY . $APP_ROOT
# start app
CMD ["npm", "run", "start"]
проект / package.json
...
"scripts": {
"start": "nodemon index.js"
}
...