🚀 Docker の volumes で node_modules が消える問題を解決!【開発者向け】
🎯 はじめに
Docker を使って React や Node.js のプロジェクトを動かしていると、
volumes:
- ../frontend/admin:/app
- /app/node_modules
のような volumes 設定をしたときに、
✅ コンテナは起動するのに node_modules が空!
✅ npm install しても何も入らない!
こんな ハマりがち な問題にぶつかったので、
その原因と 確実に node_modules をインストールする方法 をまとめました!🚀
🔍 node_modules が消える原因
この問題は volumes のマウントの仕組み によるもの。
以下の volumes 設定を見てみましょう。
volumes:
- ../frontend/admin:/app
- /app/node_modules
この場合、/app/node_modules に 空のボリューム がマウントされる ため、
npm install しても 何もインストールされない。
Docker の volumes は、指定されたパスに何もない場合、
空のディレクトリを作成してコンテナのディレクトリを上書き してしまう。
🚨 つまり…
-
node_modulesをインストールしても、/app/node_modulesがvolumesによって上書きされて空になる!
✅ 正しい volumes の設定方法
node_modules を コンテナ内で管理 したい場合、
方法① node_modules の volumes を削除する
volumes:
- ../frontend/admin:/app # `node_modules` のマウントをしない!
この場合、コンテナの /app/node_modules はそのまま維持され、正常に npm install される。
方法② tmpfs を使って node_modules をコンテナ内で保持
開発環境で ホットリロードを使いつつ、node_modules を維持したい 場合は tmpfs を使うのがベスト。
services:
app:
image: my-app
volumes:
- ../frontend/admin:/app # ソースコードは同期
tmpfs:
- /app/node_modules # `node_modules` はコンテナ内で管理
✅ メリット:
-
node_modulesを ホストと同期しない ので、依存関係が壊れない。 - ソースコードは ホストと同期 するので、ホットリロードは有効。
🔄 volumes の確認方法
もし「本当に volumes のせいで node_modules が空になってるの?」と思ったら、
Docker の inspect コマンドで確認できます。
docker inspect <コンテナID> | grep node_modules
また、コンテナに入って node_modules の状態を確認するのも有効。
docker exec -it <コンテナID> sh
ls -la /app/node_modules
node_modules が空になっているなら、volumes のせい!
🎯 まとめ
✅ volumes に /app/node_modules を指定すると node_modules が消える
✅ 開発時は volumes から node_modules を除外 or tmpfs を使う
✅ docker inspect や exec で node_modules の状態を確認できる
もし node_modules が消えてしまって困っているなら、
volumes の設定を見直してみよう! 🚀