はじめに
- 久しぶりにバックエンド側の開発を進めようとしたらexpressが動いているdockerコンテナが落ちていた
- 原因を調べていたら下記のエラーでおちていた
[nodemon] Internal watch failed: watch ENOSPC
解決にあたって参考になったページ
- エラーの原因は、監視できるファイル数が上限に達していることが原因とのことです。
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
上記の手順でエラーが解消されました。