2016-07-01 3 views
2

Я использую latest Docker public beta на ОС Windows 10.Как избежать проблем с symlink при запуске npm в Docker на хосте Windows?

Я занимаюсь разработкой приложения Node.js и я использую Docker с моего каталога Src смонтированного как объем в контейнере.

Я не могу запустить npm install внутри контейнера, потому что это вызовет создание символических ссылок (в каталоге node_modules), которые, по-видимому, не поддерживаются в томах, если хост является Windows.

Есть ли что-нибудь, что я могу сделать для решения этой проблемы?

У меня нет проблем с запуском этого в среде Linux.

После некоторых исследований я нашел множество решений, связанных с Virtualbox, для «старой» версии Docker (Docker Toolbox).

+0

Какой проект вы пытаетесь построить? В качестве альтернативы вы можете привести простой пример, который воспроизводит проблему? – friism

ответ

3

Я решил следующим образом.

Я буду использовать /usr/src в качестве каталога для установки в контейнере, в этом примере:

  1. Маунт каталог ЦСИ вашего приложения на /usr/src: -v c:/path/to/src:/usr/src
  2. Определить объем данных для node_modules: -v /usr/src/node_modules

Таким образом, вы будете иметь, что c:/path/to/src будет установлен на /usr/src и /usr/src/node_modules ш плохо монтируется объем данных.

Конечным результатом является то, что на хосте создается каталог node_modules, он останется пустым.

Данное решение использует Docker Data Volumes.

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

3

Чтобы избежать symlink ошибки с НПМИ вы можете использовать команду:

npm install --no-bin-links 

Однако абсолютно избежать symlink проблем, вы не должны установить свой проект nodejs в смонтированном каталоге (смонтированный из окна)

+0

Я уже пробовал с этим, но, похоже, я не могу запускать свои задачи gulp :(Эти пакеты должны быть установлены как глобальные, не так ли? –

+1

С кодом Front-end вы не должны создавать его в Docker Container. хост и подключите его к Docker на 'COPY'. Но если вы пытаетесь использовать Docker для среды разработки, я думаю, что это нехорошо. –

+0

Второе предложение - настоящее! Чувак, вы спасли мне жизнь! блестящая идея.Чтобы разработать немного больше. Я боролся с проблемой между Docker + Windows + Magento + Grunt, и я не смог скомпилировать темы, поскольку grunt пытался создать символические ссылки в паб-папке, и как-то они превратились в поврежденные. Я использовал ваше предложение, т. Е. Создал главную символическую ссылку на локальную (для docker's vm) папку - она ​​работала как шарм! – user1105491

Смежные вопросы