рабочие пространства и докер пряжи

Я пытаюсь использовать рабочие пространства пряжи, а затем помещаю свое приложение в образ Docker.

Структура папок выглядит так:

  • root
    • Dockerfile
    • node_modules/
      • libA --> ../libA
    • libA/
      • ...
    • app/
      • ...

К сожалению, Docker не поддерживает символические ссылки, поэтому невозможно скопировать папку node_modules из корневого каталога в образ Docker, даже если файл Docker находится в корне, как в моем случае.

Одна вещь, которую я мог бы сделать, это исключить символические ссылки с .dockerignore, а затем скопировать реальный каталог в образ.

Другая идея, которую я бы предпочел, заключалась в том, чтобы иметь инструмент, который заменяет символические ссылки фактическим содержимым символической ссылки. Знаете ли вы, есть ли такой инструмент (желательно пакет Javascript)?

Спасибо


person Steven    schedule 01.06.2018    source источник
comment
Не следует ли использовать yarn install для установки модулей узла в среде контейнера Docker, а не копировать их из среды разработки? Это можно настроить в вашем Dockerfile.   -  person YodaScholtz    schedule 01.06.2018
comment
Ах да - не подумал о такой возможности. Большое спасибо!   -  person Steven    schedule 03.06.2018
comment
Прохладно! Если вам нужна дополнительная помощь, я могу поставить ее в качестве ответа, в противном случае я уверен, что вы придете с небольшим исследованием вышеизложенного.   -  person YodaScholtz    schedule 03.06.2018
comment
У меня сработало с вашим ответом :-)   -  person Steven    schedule 05.06.2018
comment
Рад, что это помогло! Я расширил свое объяснение выше и включил его в качестве ответа для всех, у кого есть такая же проблема. Буду признателен, если вы примете это, не обязан это делать.   -  person YodaScholtz    schedule 05.06.2018
comment
Я предполагаю, что libA опубликован в репозитории npmjs. Что делать, если вы не хотите публиковать libA?   -  person Gudlaugur Egilsson    schedule 25.11.2019
comment
@GudlaugurEgilsson Я давно искал этот точный ответ :-)   -  person McFlurriez    schedule 11.04.2021


Ответы (1)


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

Основное преимущество Docker заключается в том, что он позволяет вам воссоздать среду разработки, не беспокоясь о машине, на которой он работает — то же самое относится и к Yarn: при запуске yarn install он устанавливает правильные версии для соответствующей архитектуры машины, на которой работает Docker. образ строится.

В свой Dockerfile включите следующее после настройки рабочего каталога:

RUN yarn install

Тогда у вас должно быть все в порядке!

Вам также следует включить каталог node_modules в файлы .gitignore и . dockerignore файлы, чтобы они никогда не включались при распространении вашего кода.

TL;DR: не копируйте каталог node_modules с локального компьютера, включите RUN yarn install в Dockerfile.

person YodaScholtz    schedule 05.06.2018
comment
Но yarn.lock находится в корне, а не в подпроекте, поэтому мы можем получить неожиданные обновления зависимостей, которые вызовут всевозможные хаосы (текущая проблема, которую я пытаюсь исправить). - person Chris Kemp; 22.03.2019
comment
Используя контекст сборки Docker, вы можете запустить свою сборку Docker из корня для подпроекта. Затем вы можете загрузить любые файлы (например, yarn.lock), которые вам нужны. - person YodaScholtz; 22.03.2019
comment
@ChrisKemp Вы нашли решение этой проблемы? - person Gudlaugur Egilsson; 18.03.2020
comment
Нет. Я решил не делиться общими модулями node_modules, и каждый подпроект управлял своим собственным. - person Chris Kemp; 18.03.2020