inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

04-07 Docker Compose Volumes

도커볼륨 마운트 관련

해결된 질문

126

gkdlsb1234

작성한 질문수 14

0

 프로젝트 구성

image.png


Dockerfile

FROM node:14
RUN apt-get update && apt-get install -y bash

COPY ./package.json /myfolder/
COPY ./yarn.lock /myfolder/
WORKDIR /myfolder/
RUN yarn install

COPY . /myfolder/

CMD ["yarn", "start:dev"]

docker-compose.yaml

version: "3.7"

services:
  node-server:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./index.js:/myfolder/index.js
      - ./email.js:/myfolder/email.js
    ports:
      - 3000:3000

  database-server:
    image: mongo:5
    ports:
      - 27017:27017

Window 환경입니다.

위와 같을 때

index.js 파일을 수정하여도
docker로 연동된 nodemon 재 실행이 안됩니다.

 

docker-desktop 에서 container 에서보면 mount 라고 표기되어있고

image.png

위의 새로고침 버튼을 누르면 제대로 적용 됩니다.

원인이 뭘까요?

javascript node.js docker rest-api nestjs

답변 2

0

노원두

안녕하세요! gkdlsb1234님!

올려주신 모든 스크린샷을 확인해본 결과,
소스코드는 수업에서 진행한대로 제대로 작성해 주신 것 같아요!

 

따라서, 이러한 경우에는 windows 시스템상의 문제, windows 내의 docker-desktop 설정 관련 문제 등으로 좁혀볼 수 있을 것 같은데요!
이러한 시스템 및 설정 문제는 보통 시스템 상황에 따라 다를 수 있으므로 원인을 먼저 분석하여 해결해야 합니다!

가장 먼저 시도해 볼 수 있는 방법을 알려드리면, docker-desktop의 설정에서 파일공유 설정에 해당 파일저장소가 제대로 공유되고있는지 확인해 보세요!

image.png



0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
gkdlsb1234님, Docker에서 volumes로 파일을 마운트해 두었는데도 nodemon이 자동 재실행되지 않는 문제에 대해 설명드리겠습니다.

현재 docker-compose.yaml 파일을 보면, index.jsemail.js 파일을 명시적으로 마운트하셨습니다. 이는 파일이 변경될 때에 해당 파일을 컨테이너 내에서 감지할 수 있도록 해야 하는데, nodemon이 그런 변경을 탐지하지 못해서 문제가 발생할 수 있습니다.

이 문제의 주요 원인은 nodemon이 실제로 파일 변경을 감지할 수 있는 폴링(polling) 방식으로 설정되지 않았기 때문일 수 있습니다. 특히, Windows 환경에서는 파일 시스템을 마운트할 때 이벤트가 제대로 전달되지 않아 이러한 문제가 발생할 수 있습니다.

해결 방법으로는 두 가지가 있습니다:

  1. 폴링을 사용하도록 설정:
    nodemon을 폴링 모드로 실행하여 사용하면 변경 사항을 감지할 수 있습니다. 이를 위해 nodemon.json 파일에 다음과 같이 설정을 추가할 수 있습니다:

    {
      "watch": ["index.js", "email.js"],
      "delay": "2500",
      "exec": "nodemon --legacy-watch", 
      "ext": "js",
      "env": {
        "NODE_ENV": "development"
      }
    }
    

    또는 Dockerfile의 CMD 부분에서 nodemon --legacy-watch 옵션을 추가해 실행할 수 있습니다:

    CMD ["nodemon", "--legacy-watch", "index.js"]
    
  2. 각 파일을 개별적으로 마운트하지 않고, 디렉토리를 마운트:
    volumes를 통해 특정 파일이 아닌 전체 디렉터리를 마운트하여, 파일 변경이 컨테이너 내에서 감지될 수 있도록 만듭니다. docker-compose.yaml을 다음과 같이 수정하세요:

    services:
      node-server:
        build:
          context: .
          dockerfile: Dockerfile
        volumes:
          - .:/myfolder
        ports:
          - 3000:3000
    

이렇게 설정하면, nodemon이 모든 파일을 감시하고 변경 시 자동으로 다시 실행될 것입니다. 이 방법들은 파일 변경 후 컨테이너를 매번 새로 고침하지 않고, 자동으로 변경 사항을 반영하는 데 유리합니다.

추가적인 도움이 필요하시다면 언제든지 질문해 주세요!
성공적인 개발을 기원합니다. 🌟

Docker 공식문서
출처: Docker Compose 공식문서

그래프 ql 문서 사용할때 느낌표 남는거 어떻게 없애나요?

0

83

2

강의 전체 소스 코드를 받고싶습니다.

0

76

2

fontawesome 사용 문의

0

77

2

소스 코드 부탁드립니다~

0

85

2

깃 레포지터리 소스

0

81

2

커리큘럼12.css 정렬 에 나오는 과제 정답알고싶어요

0

73

2

10-01 Entity TypeOrmModule.forRoot 에 entities

0

85

3

강의 버전관련 문의입니다

0

102

2

Ubuntu 설치 관련

0

61

1

schema.gql 질문 드립니다.

0

51

1

서버 재실행시 Many to Many

0

101

3

input 관련 문의

0

90

2

Rest API 보다는 graphql이 주된 내용인데

0

130

2

강의 전체 소스코드 받을수있을까요?

0

155

1

findOne 타입스크립트오류

0

109

1

http => htrtps 호출 인증서 신뢰 오류

0

349

1

self-signed certificate in certificate chain 에러 발생

0

411

1

mongoose 설치 오류

0

142

1

특정 API, 특정 IP 허용 (단일경로에 CORS 활성화)

0

281

2

08-06

0

177

3

구조랑 패턴 관련해서 질문

0

125

2

mydocker

0

128

2

coolsms statuscode 2000 인데 전송안돼는 경우 확인.

0

156

1

싸이월드 과제 쪽이 궁금합니다.

0

147

2