【解決方法】Vagrantで立てたDocker内で起動しているNode.jsの再起動ツールnodemonがファイル変更時に再起動しない問題の対処

VagrantNode.jsエラー解消Docker
【解決方法】Vagrantで立てたDocker内で起動しているNode.jsの再起動ツールnodemonがファイル変更時に再起動しない問題の対処
Memo
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Vagrantで立てたDocker内で起動しているNode.jsの再起動ツールnodemonがファイル変更時に再起動しない問題の対処をメモしました。

経緯

Vagrantで立てたdocker内で起動しているNode.jsのアプリのdebugの際に開発モードとnodemonを利用して ファイル保存時に再起動させたかったがなぜか再起動されなかったため調査したことがきっかけです。

構成

Vagrant > Docker > Webアプリ

設定

nodemon.json

Docker内で利用しているnodemon.jsonの設定です。

{
  "watch": ["src"],
  "ext": "ts",
  "project": "./tsconfig.json",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "ts-node ./src/index.ts",
}

Docker内で利用しているアプリのpackage.jsonのnpm scriptsの設定です。

package.json

"scripts": {
  "develop": "NODE_ENV=develo nodemon"
}

環境

  • Vagrant 2.2.16
  • VirtualBox 6.1.22 r144080
  • Docker 20.10.2
  • docker-compose 1.25.0
  • Node.js 14.17
  • nodemon 2.0.7

事象の再現手順

通常通りnpm scriptsでdevelopコマンドで起動します。

terminal
$ yarn develop yarn run v1.22.10 $ NODE_ENV=develop nodemon [nodemon] 2.0.7 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): src/**/* [nodemon] watching extensions: ts [nodemon] starting `ts-node ./src/index.ts` listening on *:8080

起動は正常にできるのですが、保存しても再起動が走りません。

--legacy-watchのオプションを指定して解決

コマンド実行時

コマンド実行時に--legacy-watchのオプションを指定して起動します。

terminal
$ nodemon --legacy-watch or $ nodemon -L

nodemon.json

nodemon.jsonで設定を書いている場合は下記の形でlegacyWatch trueの設定を追加します。

nodemon.json
{ "legacyWatch": true }

原因

一部のネットワーク環境(マウントされたドライブ全体でnodemon読み取りを実行するコンテナーなど)では Chokidarのポーリングを有効にするlegacyWatch:trueを使用する必要があるようです。

終わりに

最後までご覧いただきありがとうございます。
この記事では【解決方法】Vagrantで立てたDocker内で起動しているNode.jsの再起動ツールnodemonがファイル変更時に再起動しない問題の対処について紹介させていただきました。

これからも皆様の開発に役立つ情報を提供していきたいと考えています。
今後ともよろしくお願いいたします。