Я создаю приложение на python с файлами javascript. Я хочу использовать browserify, поэтому я хочу установить некоторые модули узлов, которые я могу использовать в своих js-файлах с вызовами require
. Я хочу, чтобы эти модули узлов были только в моем контейнере, а не в хост-машине. Вот моя настройка Docker для конкретного контейнера.Файлы контейнера докеров, перезаписанные общим томом хоста
### Dockerfile
FROM node:5.9.1
RUN npm install -g browserify
RUN mkdir /js_scripts
ADD package.json /js_scripts/
WORKDIR /js_scripts
RUN npm install # This installs required packages from package.json
RUN ls # lists the node_modules directory indicating successful install.
Теперь я хочу поделиться js files
от моего хозяина машины с этим контейнером, так что я могу запустить browserify main.js -o bundle.js
команды в контейнере. Вот мой docker-compose.yml
, который копирует host_js_files
в мой каталог js_scripts
.
node:
build: .
volumes:
- ./host_js_files:/js_scripts
Теперь, когда я бегу контейнер docker-compose run node bash
и ls
в каталоге js_scripts
Я вижу только мои JS файлы из тома хоста, и мой node_modules
каталог не видно. Это имеет смысл, основываясь на том, как тома устанавливаются в докере.
Однако я хочу иметь эти node_modules
в контейнере для успешного запуска browserify
(который ищет эти узловые модули). Есть ли хороший способ сделать это без глобальной установки узлов в контейнере или установки модулей на главной машине?
Спасибо за ваш вклад.
У меня точно такая же проблема. Вы случайно нашли рабочее решение? – Spock
Основываясь на ответе, отмеченном правильно, в котором говорится: «Вы можете смонтировать в качестве тома каталог node_modules, чтобы избежать загрузки всех зависимостей за все время создания нового контейнера», мне пришлось иметь свой каталог 'node_modules', который был бы совместно использован с главной машины , Таким образом, при первом запуске контейнера он загружал модули узла в общий том и был доступен каждый раз, когда контейнер запускался. – akotian