フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

NodeJsのnodemon Internal watch failed: watch ENOSPCエラーの解決手順

はじめに

  • 久しぶりにバックエンド側の開発を進めようとしたらexpressが動いているdockerコンテナが落ちていた
  • 原因を調べていたら下記のエラーでおちていた
[nodemon] Internal watch failed: watch ENOSPC
  • 現在、centos上でdockerを動かして開発しており、VSCodeSSH接続して直接サーバー上で開発をしている状況でおきました。

解決にあたって参考になったページ

  • エラーの原因は、監視できるファイル数が上限に達していることが原因とのことです。

github.com

stackoverflow.com

inotifyとは

Linuxは、ファイル監視のためにinotifyというAPIがあり、このAPIを使用することで個々のファイルやディレクトリを監視しています。inotifyで監視できるファイル数はデフォルトで8192に上限が されている。その上限を超えたためのエラーだったようです。

解決方法手順

※この問題はdockerの問題ではなく、動作しているLinuxOSの問題です。 ※root権限のアカウントで実行して下さい。

  • inotifyの上限値を調べる
# cat /proc/sys/fs/inotify/max_user_watches
8192
  • 参考ページのコマンドを実行する
# sysctl fs.inotify.max_user_watches=524288
fs.inotify.max_user_watches = 524288
  • inotifyの上限値が変更されていることを確認する(下記のコマンドはサーバーを再起動していまうと消えてしまう)
# cat /proc/sys/fs/inotify/max_user_watches
524288
  • 下記のコマンドを実行してsysctl.confにfs.inotify.max_user_watches=524288の記述を追加する
# echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
# sudo sysctl -p

上記の手順でエラーが解消されました。