Inviqus
@Inviqus

Как правильно запускать nodemon из docker без нагрузки на CPU?

Здравствуйте.
Существуют файлы:

Dockerfile
FROM node:alpine
RUN yarn global add nodemon

docker-compose.yml
version: '3'
services:
  server_node:
    build: ./app/
    volumes:
      - "./app:/app"
    ports: 
      - "9000:3000"
    command: "nodemon --legacy-watch --polling-interval 4000 /app/bin/server.node.js"


Простой контейнер, который запускает nodemon и следит за изменениями /app/bin/server.node.js (hello world expressJS). Всё работает, но проблема в том, что после запуска nodemon нагрузка на CPU процессом com.docker.hyperkit вырастает (как минимум) на 150%.

Если nodemon заменить обычным node:command: "node /app/bin/server.node.js", то отслеживая файлов не происходит и нагрузки на CPU не возникает.

Такая проблема была у многих, судя по сообщениям в github issues и т. д. в 2016-2017г. Решением было снизить polling interval у nodemon и использовать legacy-watch, что советуют даже в официальной документации. В моём случае, к сожалению, не помогло.

Еще заметил, что если проигнорировать нагрузку и изменить server.node.js, то nodemon в docker перезапускается не один раз, как должно быть, а раз 5-20 почти без задержки (количество перезапусков не всегда одинаковое). Возникает чувство, что nodemon постоянно получает уведомления, что файл изменился, проверяет, какая именно часть изменилась, но не находит отличий и засыпает.

Кто нибудь сталкивался с таким поведением отслеживания файлов в docker? Есть ли какое нибудь рациональное решение данного явления?

Заранее спасибо.
  • Вопрос задан
  • 808 просмотров
Пригласить эксперта
Ответы на вопрос 1
Некоторое время помучавшись с nodemon мы взяли pm2-dev и стало гораздо лучше pm2.keymetrics.io/docs/usage/pm2-development
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы