인프런 커뮤니티 질문&답변

둘리눈알님의 프로필 이미지

작성한 질문수

도커 쓸 땐 필수! 도커 컴포즈

[개인 실습 해설] 프론트엔드, 백엔드, 데이터베이스로 구성된 방명록 서비스 실행하기

도커 컴포즈 그대로 해서 docker-compose up -d 명령어 쳤는데, 프론트엔드랑 몽고디비는 up 상태가 되는데, 백엔드에서 몽고디비 커넥션이 안되네요

작성

·

354

0

version: '3'

services:
  frontend:
    image: subicura/guestbook-frontend:latest
    ports:
      - 60000:3000
    environment:
      - PORT=3000
      - GUESTBOOK_API_ADDR=backend:5000
  backend:
    image: subicura/guestbook-backend:latest
    environment:
      - PORT=5000
      - GUESTBOOK_DB_ADDR=mongodb:27017
  mongodb:
    image: mongo:4
    ports:
      - "27017:27017"
    volumes:
      - db_data:/data/db

volumes:
  db_data: {}

에러는 아래와 같이 뜨고 있어요!

 

backend_1   | Debugger listening on ws://127.0.0.1:9229/b66de091-4ab3-4940-99cf-a5048b8939db

backend_1   | For help see https://nodejs.org/en/docs/inspector

backend_1   | App listening on port 5000

backend_1   | Press Ctrl+C to quit.

backend_1   | Disconnected: unable to reconnect to mongodb://mongodb:27017/guestbook

backend_1   | /backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.js:474

backend_1   |       throw err;

backend_1   |       ^

backend_1   | 

backend_1   | Error: Disconnected: unable to reconnect to mongodb://mongodb:27017/guestbook

backend_1   |     at NativeConnection.db.on (/backend/routes/messages.js:10:11)

backend_1   |     at emitNone (events.js:106:13)

backend_1   |     at NativeConnection.emit (events.js:208:7)

backend_1   |     at NativeConnection.set (/backend/node_modules/mongoose/lib/connection.js:119:12)

backend_1   |     at /backend/node_modules/mongoose/lib/connection.js:529:26

backend_1   |     at err (/backend/node_modules/mongoose/node_modules/mongodb/lib/utils.js:415:14)

backend_1   |     at executeCallback (/backend/node_modules/mongoose/node_modules/mongodb/lib/utils.js:404:25)

backend_1   |     at err (/backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.js:293:21)

backend_1   |     at connectCallback (/backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.js:249:5)

backend_1   |     at process.nextTick (/backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.js:471:7)

backend_1   |     at combinedTickCallback (internal/process/nexttick.js:132:7)

backend_1   |     at process._tickCallback (internal/process/next_tick.js:181:9)

답변 2

0

너굴님의 프로필 이미지
너굴
지식공유자

안녕하세요. 제가 최근에 인프런에 접속을 하지 못했어서 질문을 이제야 봤네요.

답변이 늦어 죄송해요.

 

말씀처럼 백엔드 API가 몽고디비와 연결이 안 되시는 상황으로 보이네요.

 

먼저, mongodb가 도커 컴포즈로 제대로 실행되는지 확인해야 할 것 같아요. 다음 명령어의 결과를 유심히 살펴보면 좋겠어요.

docker-compose up mongodb

 

만약 도커 컴포즈로 mongodb가 잘 실행되고 있다면, 혹시 도커 컴포즈로 띄운 mongodb 외에 27017 포트를 사용하는 다른 프로세스가 있는지도 확인해보면 좋겠어요. (일반적인 경우라면 포트 충돌 때문에 mongodb 컨테이너가 제대로 실행되지 않아야 하겠으나, 도커 환경에 따라 실행이 잘 되기도 해요.) 호스트에서 27017 포트를 사용하는 프로세스를 찾으려면 다음 명령어를 사용하시면 돼요.

# Windows라면
netstat -ano | findstr :27017

# macOS나 리눅스라면
netstat -tuln | grep 27017  # 혹은
lsof -i :27017              # 혹은
ss -tuln | grep 27017

 

0

안녕하세요, 인프런 AI 인턴이에요.

도커 컴포즈를 사용하여 서비스를 올리는데, 프론트엔드와 몽고디비는 정상적으로 올라가지만 백엔드에서 몽고디비 커넥션이 안된다고 하셨네요.

에러 메시지를 보면 백엔드와 몽고디비의 연결이 끊어졌다는 내용이 보입니다. 해결 방법으로는 다음과 같은 요소들을 확인해볼 수 있습니다.

  1. 몽고디비 서비스의 호스트이름 확인: 몽고디비 서비스를 backend 서비스에서 사용할 때, 호스트이름을 확인해야 합니다. 현재 GUESTBOOK_DB_ADDR=mongodb:27017로 설정되어 있어, backend에서 mongodb:27017 호스트로 접속하려고 시도합니다. 호스트 이름이 올바른지 다시 한번 확인해보세요.

  2. 포트 연결 확인: 백엔드와 몽고디비 컨테이너 간의 포트 연결이 올바른지 다시 확인해보세요. 현재는 몽고디비의 27017 포트와 백엔드의 5000 포트가 매핑되어 있어야 합니다.

  3. 네트워크 설정: 혹시 서버 네트워크 설정이 올바르게 되어 있는지 확인해보세요. 도커 내에서 어떻게 네트워크가 구성되어 있는지 확인하고, 백엔드와 몽고디비가 같은 네트워크에 속해있는지 확인해보세요.

위의 요소들을 하나씩 확인하면서 문제를 해결해보세요. 추가로 에러 메시지에 더 자세한 정보가 있다면 공유해주시면 더 정확한 도움을 드릴 수 있을 것 같아요.

문제가 해결되지 않거나 추가적으로 질문이 있으면 언제든지 물어보세요. 좋은 결과 있기를 기원할게요!