🚀 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
の設定を見直してみよう! 🚀