Здравствуйте.
Существуют файлы:
DockerfileFROM node:alpine
RUN yarn global add nodemon
docker-compose.ymlversion: '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? Есть ли какое нибудь рациональное решение данного явления?
Заранее спасибо.