npm установить в 4 раза медленнее в docker контейнере по сравнению с хостом - PullRequest
2 голосов
/ 25 февраля 2020

Я пытаюсь подготовить проект локально, который использует NodeJs с NPM.

Я использую npm install на своем хост-компьютере (MacBook Pro Retina, 15 дюймов, середина 2015 г.), используя nvm с версией узла 10.19:

added 2335 packages from 985 contributors and audited 916010 packages in 61.736s

Когда Я запускаю ту же настройку в Docker, результат намного медленнее. Это мой docker-compose.yml файл:

version: '3.4'
services:
  node:
    image: node:10.19-alpine
    container_name: node
    volumes:
      - .:/app/
      - npm-cache:/root/.npm
    working_dir: /app
    command: ["tail", "-f", "/dev/null"]

volumes:
  npm-cache:
    external: false

Затем я выполняю:

 docker-compose up -d node; docker exec -t node npm install

И результат:

added 2265 packages from 975 contributors and audited 916010 packages in 259.895s

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

Я думал, что быстрая установка была достигнута благодаря наличию локального кэша (поэтому в кэше docker есть дополнительный том для кэширования), но затем я запустил:

$ npm cache clean --force && rm -rf ~/.npm && rm -rf node_modules

, и результат для установки на хост-машине по-прежнему постоянно ~ 60 секунд.

Когда речь идет о ресурсах, выделенных для виртуальной машины Docker, он не должен Это не проблема, вот моя Docker конфигурация виртуальной машины:

docker settings docker version

Я не знаю где еще посмотреть, любая помощь будет принята с благодарностью.

Спасибо

1 Ответ

1 голос
/ 25 февраля 2020

Это замедление вызвано совместным использованием файлов между контейнером и хостом. Чтобы справиться с этим, вы можете попробовать docker -syn c.

Этот инструмент поддерживает различные стратегии автоматической синхронизации между хост-машиной и контейнерами (включая rsync).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...