【解決策】Vagrant + Docker環境で起動中のNodeアプリのファイル変更時にnodemonの再起動が走らない問題の原因と対応
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Vagrantで立てたDocker内で起動しているNode.jsの再起動ツールnodemonがファイル変更時に再起動しない問題の対処をメモしました。
経緯
Vagrantで立てたdocker内で起動しているNode.jsのアプリのdebugの際に開発モードとnodemonを利用して ファイル保存時に再起動させたかったがなぜか再起動されなかったため調査したことがきっかけです。
構成
Vagrant > Docker > Webアプリ
設定
nodemon.json
Docker内で利用しているnodemon.jsonの設定です。
json// 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
json// 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コマンドで起動します。
zsh$ 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のオプションを指定して起動します。
zsh$ nodemon --legacy-watch
or
$ nodemon -L
nodemon.json
nodemon.jsonで設定を書いている場合は下記の形でlegacyWatch trueの設定を追加します。
nodemon.json{
"legacyWatch": true
}
原因
一部のネットワーク環境(マウントされたドライブ全体でnodemon読み取りを実行するコンテナーなど)では
Chokidarのポーリングを有効にするlegacyWatch:trueを使用する必要があるようです。
articleDocker を用いた統一ローカル環境:新人オンボーディングを 1 日 → 1 時間へ
articleDocker で Dev Container を構築:VS Code/Codespaces で即戦力環境を配布
articleDocker マルチステージビルド設計大全:テスト分離・依存最小化・キャッシュ戦略
articleDocker コマンド早見表:build/run/exec/logs/prune を 1 枚で網羅
articleWindows WSL2 に Docker を最適導入:I/O 最適化・メモリ配分・互換性チェック
articleDocker vs Podman vs nerdctl 徹底比較:CLI 互換性・rootless・企業導入の勘所
article【2025 年 10 月 29 日発表】VS Code、Copilot が仕様作成を支援する「Plan モード」とは?
articleZustand × useTransition 概説:並列レンダリング時代に安全な更新を設計する
articleHaystack とは?RAG 検索 × 生成 AI を実務投入するための完全入門【2025 年版】
articleWordPress × Bedrock/Composer 入門:プラグイン管理をコード化する
articleZod で「never に推論される」問題の原因と対処:`narrowing` と `as const`
articleWebSocket 活用事例:金融トレーディング板情報の超低遅延配信アーキテクチャ
blogiPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
blogGoogleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
blog【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
blogGoogleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
blogPixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
blogフロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
review今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
reviewついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
review愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
review週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
review新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
review科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来