bind mount 掛原始碼會蓋掉 image 裡的 node_modules
開發熱重載時
-v $(pwd):/app會把主機目錄整個蓋在容器的/app上,連 image 裡 build 時裝好的node_modules也一起被蓋掉——而你主機上可能根本沒有,或裝的是給不同 OS/架構用的版本。
解法:多掛一個匿名 volume 開洞
docker run -d --name dev -p 3000:3000 \
-v $(pwd):/app \
-v /app/node_modules \ # ← 在這個位置開一個洞,讓 image 原本的內容露出來
my-app:devCompose 版本同理:
volumes:
- .:/app
- /app/node_modulesMac 上的額外考量
bind mount 在 Mac 要跨 VM 邊界(見 VM 與容器的差別在有沒有自己的 kernel),I/O 很慢。大量小檔案(如 node_modules)盡量用 named volume 而不是 bind mount。