도커파일 명령어가 한줄인 경우 간략하게 compose설정하기
my-database 컨테이너의 Dockerfile 명령어는 한줄이므로 image : mongo:5 로 편하게 가져올 수 있다.
// docker-compose.yaml 파일
version : '3.7'
# 컴퓨터들
# 내데이터베이스컴퓨터:
# build:
# 파일경로:
# 파일명: Dockerfile.mongo
services :
my-backend:
build:
context: .
dockerfile: Dockerfile
ports:
- 4000:4000
my-database:
image : mongo:5
ports:
- 27017:27017
백엔드 서버 ODM 연결 설정하기
// index.js 파일
import mongoose from 'mongoose'
mongoose.connect('mongodb://localhost:27017/mydocker')
.then(()=>console.log('db 접속에 성곡하였습니다'))
.catch(()=> console.log('db 접속에 실패하였습니다'))
app.listen(4000,()=>{
console.log('서버 시작')
});
localhost:27017 연결 에러
docker-compose build 이후 docker-compose-up 으로 서버를 실행하면,
서버 컨테이너와 데이터베이스 컨테이너가 서로 연결되지 못하는 에러가 발생한다.
원인
백엔드 서버 컨테이너에서 localhost:27017 로 연결을 시도하는데, 여기서 localhost 는 백엔드 서버 컨테이너를 의미한다. 따라서 27017 포트로 연결을 시도해도 연결을 할 수 없다.
해결방법
도커 컴포즈안에서 name resolution ( 이름을 통해서 서로 연결 ) 을 통해서 연결하면 된다.
내 컴퓨터와 컨테이너가 데이터 통신을 할 필요가 없고 컨테이너간 통신만 필요하다면 ,
네임 리졸루션을 사용하면 되니까 포트포워딩은 필요없다.
// index.js 파일
// name resolution 사용 ( localhost 가 아니라 my-database )
mongoose.connect('mongodb://my-database:27017/mydocker')
.then(()=>console.log('db 접속에 성곡하였습니다'))
.catch(()=> console.log('db 접속에 실패하였습니다'))
결과
728x90
'Backend 백엔드' 카테고리의 다른 글
[ 29 ] Docker Compose Volumes (0) | 2024.08.20 |
---|---|
[ 28 ] mongoose 로 Board_API 만들기 실습 (0) | 2024.08.20 |
[ 26 ] docker compose (0) | 2024.08.19 |
[ 25 ] MongoDB 연결 (0) | 2024.08.19 |
[ 24 ] 백엔드와 데이터베이스 (0) | 2024.08.16 |