Docker 개발 중 node_modules 날아간 적 있나요? 저만 그런 거 아니죠?
Docker 쓸 때 bind mount 기능 진짜 자주 쓰게 되잖아요? 저도 “이게 편하지~” 하면서 쓰다가 앱이 갑자기 안 돌아가는 바람에 멘붕 왔던 적 있어요. 오늘은 그런 상황에서 제가 어떻게 문제를 겪었고, 어떻게 진짜 간단한 방법으로 해결했는지 얘기해보려고요.

bind mount? 그거 뭐였더라?
간단히 말하면, 내 컴퓨터에 있는 폴더를 Docker container 안으로 연결해주는 거예요. 예를 들면, 프로젝트 폴더 전체를 container 안의 /app에 연결할 수 있어요. 길게 경로 쓰는 거 귀찮으면, 이렇게 단축해서 쓰면 돼요:
- macOS / Linux: -v $(pwd):/app
- Windows: -v "%cd%":/app
개발할 때마다 타이핑 줄어드니까 체감상 생산성 확 올라가죠. 근데요, 함정이 있어요…
진짜 황당했던 순간 - node_modules 어디 갔어?!
제가 진짜 직접 겪은 얘기예요. Docker image 빌드하고 나서 npm install도 했고, 분명히 다 잘 됐어요. 그런데 container를 실행하려고 bind mount를 걸었더니… 어라? 갑자기 앱이 작동을 안 해요. 에러 메시지엔 express 못 찾겠다고 나오고… 뭔가 이상한 거죠.
알고 보니, bind mount가 container 안의 /app을 아예 내 로컬 폴더로 통째로 덮어버리는 거예요. 그러다 보니 image 빌드할 때 설치했던 node_modules가 사라진 거예요. 그런데 로컬에는 제가 npm install 안 해놨으니 당연히 없겠죠? 그럼 app은 필요한 거 못 찾고 멈춰버리는 거예요.

이 구조를 이해해야 마음이 편해져요
Docker에서 파일을 다루는 방법엔 두 가지가 있어요:
- Docker가 직접 관리하는 volume
- 내 컴퓨터 폴더를 연결하는 bind mount
bind mount를 쓰면 당연히 로컬 파일이 우선 적용돼요. 좋은 점은 파일 수정하면 바로 반영된다는 거. 그런데 중요한 파일까지 덮어지면? 진짜 피곤하죠. node_modules는 그런 중요한 폴더 중 하나예요.
해결책은 의외로 간단했어요 – 익명 volume 하나만 더!
저는 처음엔 진짜 막막했어요. 근데 딱 하나만 추가하면 해결되더라고요. node_modules 폴더만 따로 volume으로 설정해주면 돼요:
-v $(pwd):/app \
-v /app/node_modules
또는 docker-compose.yml에서 이렇게도 가능해요:
volumes:
- .:/app
- /app/node_modules
이렇게 하면 /app은 여전히 내 로컬 폴더로 바뀌지만, node_modules는 container 내부에 남아요. 왜냐면 Docker는 경로가 겹칠 때 더 자세한 경로를 우선 적용하거든요.
경로 충돌? 걱정 마세요, Docker가 잘 처리해줘요
Docker는 참 똑똑해요. /app이랑 /app/node_modules 둘 다 volume으로 지정돼 있으면, /app/node_modules 쪽이 이겨요. 이유는 간단해요. 더 구체적이니까요.
그래서 container 안에서 npm으로 설치한 의존성들이 살아남는 거죠. 앱도 정상적으로 돌아가고요. 이걸 알고 나니까 마음이 한결 편해졌어요.
뭐가 좋아졌냐고요? 말해 뭐해요
이렇게 설정하니까 너무 편해요:
- 코드 고치고 저장만 하면 바로 container에 반영돼요.
- 이미지에 있던 node_modules 그대로 쓰니까 따로 설치 안 해도 되고요.
- 앱 수정할 때마다 Docker image 다시 빌드할 필요도 없어요.
실제로 HTML 파일에서 텍스트 하나 지우고 저장했더니, 브라우저 새로고침만으로 바로 반영되더라고요. 이거 하나 때문에 개발할 맛이 다시 났어요.
저처럼 따라 해보세요!
- 일단 기존에 실행 중인 container는 꺼주세요:
docker stop your_container
docker rm your_container
- 그리고 이렇게 새로 실행해보세요:
docker run --rm -v $(pwd):/app -v /app/node_modules your_image
- 코드 바꾸고 저장 → 브라우저 새로고침 → 끝! 신세계예요.

마무리하며 – 이건 진짜 꼭 알아야 해요
처음엔 그냥 편하게 쓰려고 했던 bind mount가 이렇게 앱을 망가뜨릴 줄 몰랐어요. 특히 node_modules처럼 중요한 폴더는 진짜 조심해야 돼요.
익명 volume 하나 추가하는 것만으로 이렇게 깔끔하게 해결될 줄은 몰랐어요. 지금은 너무 편하게 잘 쓰고 있고, 예전의 저처럼 고생하는 사람들에게 꼭 알려주고 싶어요.
'SW > Kubernetes, Docker' 카테고리의 다른 글
| Docker에서 read-only mount 설정하는 이유와 실전 적용 팁 (0) | 2025.09.06 |
|---|---|
| Nodemon으로 Docker 개발환경 자동화하는 법 (Node.js 개발자 필독!) (0) | 2025.09.05 |
| Docker에서 데이터 사라지는 이유와 해결법: Volume과 Bind Mount 완전 정리 (0) | 2025.09.03 |
| Docker에서 데이터 유지하려면 꼭 알아야 할 Volumes 개념과 실습 방법 (0) | 2025.09.02 |
| Docker 초보자를 위한 데이터 저장 방식 가이드 (Image, Container, Volume 차이) (0) | 2025.09.01 |