У меня проблема с установкой node_modules
внутри контейнера Docker и синхронизацией их с хостом. Моя версия Docker 18.03.1-ce, build 9ee9f40
и версия Docker Compose 1.21.2, build a133471
.
Мой docker-compose.yml
выглядит так:
# Frontend Container.
frontend:
build: ./app/frontend
volumes:
- ./app/frontend:/usr/src/app
- frontend-node-modules:/usr/src/app/node_modules
ports:
- 3000:3000
environment:
NODE_ENV: ${ENV}
command: npm start
# Define all the external volumes.
volumes:
frontend-node-modules: ~
Мой Dockerfile
:
# Set the base image.
FROM node:10
# Create and define the working directory.
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# Install the application dependencies.
COPY package.json ./
COPY package-lock.json ./
RUN npm install
Уловка с внешним объемом описана во многих постах блога и ответах Stack Overflow. Например, этот.
Приложение прекрасно работает. Исходный код синхронизирован. Горячая перезагрузка тоже отлично работает.
Единственная проблема, которая у меня есть, это то, что папка node_modules
пуста на хосте. Можно ли синхронизировать папку node_modules
которая находится внутри контейнера Docker, с хостом?
Я уже прочитал эти ответы:
К сожалению, они мне не очень помогли. Мне не нравится первый, потому что я не хочу запускать npm install
на моем хосте из-за возможных межплатформенных проблем (например, хост - Windows или Mac, а контейнер Docker - Debian 8 или Ubuntu 16.04). Второй Dockerfile
тоже мне не подходит, потому что я хотел бы запустить npm install
в моем Dockerfile
вместо того, чтобы запускать его после запуска контейнера Docker.
Кроме того, я нашел этот пост в блоге. Автор пытается решить ту же проблему, с которой я столкнулся. Проблема в том, что node_modules
не будут синхронизированы, потому что мы просто копируем их из контейнера Docker на хост.
Я хотел бы, чтобы мои node_modules
внутри контейнера Docker были синхронизированы с хостом. Пожалуйста, примите во внимание, что я хочу:
- установить
node_modules
автоматически, а не вручную - установить
node_modules
внутри контейнера Docker вместо хоста - синхронизировать
node_modules
с хостом (если я устанавливаю новый пакет внутри контейнера Docker, он должен синхронизироваться с хостом автоматически без каких-либо действий вручную)
Мне нужно иметь node_modules
на хосте, потому что:
- возможность читать исходный код, когда мне нужно
- интегрированная среда должна
node_modules
быть установлен локально, чтобы он мог иметь доступ кdevDependencies
, таких какeslint
илиprettier
. Я не хочу устанавливать этиdevDependencies
глобально.
Заранее спасибо.