Node/Docker — это node-sass, который не находит установленных привязок (через Webpack)

Я изо всех сил пытаюсь настроить сервер разработки webpack в контейнере докеров на основе node:latest

Несмотря на то, что мы пробовали все различные заклинания в Node Sass мог не могу найти привязку для вашей текущей среды, я продолжаю получать ту же ошибку:

web_1         | ERROR in ./~/css-loader!./~/sass-loader/lib/loader.js!./src/sass/style.sass
web_1         | Module build failed: Error: Missing binding /prject/node_modules/node-sass/vendor/linux-x64-59/binding.node
web_1         | Node Sass could not find a binding for your current environment: Linux 64-bit with Node.js 9.x
web

вот ток

# Dockerfile
RUN yarn cache clean && yarn install --non-interactive --force
RUN rm -rf node_modules/node_sass
RUN npm rebuild node-sass

шаг перестроения предполагает, что двоичный файл установлен и проверяется:

Binary found at /advocate/node_modules/node-sass/vendor/linux-x64-59/binding.node
Testing binary
Binary is fine

Меня также смущает то, что я понимаю это

web_1         | Found bindings for the following environments:
web_1         |   - OS X 64-bit with Node.js 7.x

что заставляет меня думать, что он использует хост-платформу в некотором качестве, которое я не совсем понимаю.


person Ben    schedule 06.03.2018    source источник
comment
Попробуйте добавить node_modules в файл .dockerignore. Установка займет немного больше времени, но вы не должны пересекаться между средой разработки и контейнером.   -  person Matt    schedule 07.03.2018
comment
Я сделал это, и в течение примерно 12 часов он работал, но теперь вернулась та же ошибка (без сомнения, из-за чего-то, что я сделал за прошедшее время)... Возможна ли запись тома docker-compose является виновником? - ../code-frontend/:/code/ ... первоначальные тесты (комментирование указанной строки и перестроение) предполагают, что так   -  person Ben    schedule 07.03.2018


Ответы (2)


Состояние каталога node_modules берется с хоста разработки в контейнер. Это проблема, когда решения, основанные на платформе, были приняты во время npm/yarn install, обычно модулей, использующих собственный код.

Сборки Dockerfile

Добавьте node_modules в свой файл .dockerignore. Установка в контейнере займет немного больше времени, но вы никогда не должны пересекаться между средой разработки и контейнером.

Установленные объемы разработки

Установка вашего кода разработки с node_modules в контейнер также может вызвать те же проблемы. Запуска yarn install --force на новой платформе перед ее использованием обычно должно быть достаточно, чтобы переключить ее назад/вперед.

Не существует простого способа игнорировать каталог при монтировании тома. Вы можете смонтировать каждый каталог/файл в вашем проекте отдельно, а затем игнорировать node_modules, но это много работы.

Синхронизация томов разработки

Это способ избежать монтирования томов. docker-sync имеет rsync стратегия, которая может игнорировать файлы. Это также может ускорить работу некоторых приложений с тяжелыми шаблонами доступа к файлам. Доступ к файлам медленный на томах, смонтированных из osx > vm > docker.

version: '2'

options:
  verbose: true

syncs:
  yourproject_data:
    sync_strategy: 'rsync'
    src: './'
    sync_host_port: 10872
    sync_args: '-v' 
    sync_excludes:
      - '.sass-cache/'
      - 'sass-cache/'
      - 'vendor/'
      - 'bower_components/'
      - 'node_modules/'
      - '.git/'

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

person Matt    schedule 07.03.2018

попробуйте эту команду:

sudo npm -g config установить пользователя root

У меня точно такая же проблема. Исправлено путем установки пользователя npm в качестве пользователя root.

person Alex You    schedule 13.05.2018