Приложение React, запущенное в контейнере docker, выходит из строя (EMFILE: слишком много открытых файлов)

#node.js #reactjs #docker #file-descriptor

Вопрос:

Мой докер-контейнер, обслуживающий интерфейс (react) моего приложения в процессе работы, выходит из строя

 {"log":"Error: EMFILE: too many open files, open '/ui/build/static/css/main.9c502893.chunk.css'n","stream":"stderr","time":"2021-08-23T11:31:39.794522183Z"}
 

Похоже, это вызвано тем, что узел сохраняет открытые статические файлы :

в /proc/61/fd :

 lr-x------    1 root     root            64 Aug 24 08:30 91 -> /ui/build/images/vertical-life-project-owner.jpg
lr-x------    1 root     root            64 Aug 24 08:30 910 -> /ui/build/icons/deckchair.png
lr-x------    1 root     root            64 Aug 24 08:30 9100 -> /ui/build/static/js/main.f38b6972.chunk.js
lr-x------    1 root     root            64 Aug 24 08:30 9101 -> /ui/build/static/css/3.3b09fbf6.chunk.css
lr-x------    1 root     root            64 Aug 24 08:30 9102 -> /ui/build/static/css/main.9c502893.chunk.css
lr-x------    1 root     root            64 Aug 24 08:30 9103 -> /ui/build/static/js/3.d81cf15a.chunk.js
lr-x------    1 root     root            64 Aug 24 08:30 9104 -> /ui/build/videos/home.mp4
lr-x------    1 root     root            64 Aug 24 08:30 9105 -> /ui/build/static/js/main.f38b6972.chunk.js
lr-x------    1 root     root            64 Aug 24 08:30 9106 -> /ui/build/static/js/0.a1e638a1.chunk.js
lr-x------    1 root     root            64 Aug 24 08:30 9107 -> /ui/build/static/js/6.f8fd35f0.chunk.js
lr-x------    1 root     root            64 Aug 24 08:30 9108 -> /ui/build/manifest.json
lr-x------    1 root     root            64 Aug 24 08:30 9109 -> /ui/build/logo192.png
...
 

ulimit Мой сервер достигнут, когда открыто достаточное количество файлов (у меня в приложении 5000 пользователей в день, так что это происходит быстро), что приводит к сбою этого контейнера докеров

Я попробовал следующее :

  • Добавьте управление кэшем заголовков в статические ресурсы
  • Обновление версии узла (12, 13.13.0, 14.17.5)
  • Добавление --ulimit nofile=20000:25000 в мою команду запуска docker
  • Увеличение ulimit на моем сервере
  • Воспользуйся graceful-fs

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

Мое приложение обслуживается с помощью этого сценария в package.json : "deployment": "export NODE_ENV=production amp;amp; serve -s build -l 5002"

запускается этим файлом dockerfile

 FROM node:14.17.5-alpine3.14

WORKDIR /ui

ENV PATH /ui/node_modules/.bin:$PATH

COPY ui /ui

COPY builds/production/.env /ui/.env

RUN yarn add package.json --silent
RUN yarn run build

CMD yarn run deployment
 

Комментарии:

1. Что вы используете для обслуживания производственной сборки?

2. @Matt Я использую эту команду : export NODE_ENV=production amp;amp; serve -s build -l 5002

3. Я добавил файл dockerfile в свой вопрос