docker-compose로 MongoDB 설치하기
by 뚜부니docker-compose를 사용해서 MongoDB 를 설치해도 보려고 해요! 프로젝트 진행 중에 약간의 어려움을 겪어서.. 다른 분들은 겪지 않았으면 하는 마음에 정리하는 것도 있어요.
MongoDB 설치
docker-compose.yml
을 다음과 같이 작성해주세요. 최신 버전의 이미지를 받아와서 설정을 하는 것이고, environment에는 DB 생성할 때 사용할 root 계정에 대한 설정이에요.
version: '3.8'
services:
mongodb:
image: mongo:latest
container_name: mongodb
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: master
MONGO_INITDB_ROOT_PASSWORD: master
volumes:
- mongo_data:/data/db
volumes:
mongo_data:
driver: local
그다음 아래 명령어를 통해 docker-compose
를 실행합니다.
docekr-compose up -d
그러면 다음과 같이 설치 및 실행된 모습을 확인할 수 있어요.
정상적으로 띄워진 상태인지 확인하려면 다음 명령어를 사용하시면 돼요.
docker-compose ps
정상적으로 띄워졌으니 docker 터미널에 접속하기 위해 다음 명령어를 실행해 보면?!
아마 접속이 안되실거예요... 😂
docker exec -it mongodb mongo -u master -p master --authenticationDatabase admin
저는 접속이 안되고 아래와 같은 문구만 뜨더라고요.
OCI runtime exec failed: exec failed: unable to start container process: exec: "mongo": executable file not found in $PATH: unknown
알아보니 이 문제는 MongoDB 4.2 버전부터는 mongosh
를 사용하여 shell에 접근해야 하는데 그렇게 접근하지 않아서 발생하는 거에요. 명령어를 다음과 같이 바꿔주면 바로 접속하실 수 있으실 거에요.
docker exec -it mongodb mongosh -u master -p master --authenticationDatabase admin
사실 초기화를 할 때는 docker exec -it mongodb mongosh
라고 입력해도 무관하다고 하는데, 전 확실하게 username, password, 계정이 있는 db 설정하고 싶어서 다 입력했어요.
mongo shell에 접속되었으니, db 설정을 해야 합니다. 계정 정보는 모두 admin
db에 저장하기 위해 db를 변경해 주었어요.
use admin
현재 master
계정의 설정은 다음 명령어를 통해 확인할 수 있어요.
db.getUser('master')
실제로 실행해 보면 다음과 유사하게 뜨실 거예요.
init 계정이기에 자동으로 root
권한을 부여받았으나, admin db에 대한 권한만 정의된 상태예요. 이 상태인 계정을 spring 프로젝트에 연동하고 Create API를 만들어 실행하면 다음과 같은 에러를 만나실 거예요 😂
2024-11-16T13:44:02.163+09:00 ERROR 94169 --- [fan-signal-api] [ Thread-11] b.f.exception.GlobalExceptionHandler : Exception occurred: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='master', source='fan-signal', password=<hidden>, mechanismProperties=<hidden>}
사용하려는 DB인 fan-signal
에 대한 권한을 주지 않아서 발생한 문제이고, 권한만 부여하면 정상적으로 동작할 거예요! 이때, db에 실제로 사용하려는 db를 입력해 주시면 됩니다.
db.grantRolesToUser("master", [{ role: "readWrite", db: "fan-singal" }])
그다음 조회해 보면 다음과 같이 fan-signal db에 대한 권한이 생긴 것을 확인할 수 있어요.
만약 이렇게 해도 안된다면..?!! 프로젝트에서 설정할 때 계정 정보를 admin db에서 가져오고 있는지 확인해 보세요. 😊
참고
- https://www.sktenterprise.com/bizInsight/blogDetail/dev/2652
- https://github.com/docker-library/mongo/issues/558
- https://www.mongodb.com/ko-kr/docs/mongodb-shell/install/
- https://www.mongodb.com/ko-kr/docs/manual/tutorial/manage-users-and-roles/
- https://www.mongodb.com/ko-kr/docs/manual/reference/method/js-user-management/
'DB > MongoDB' 카테고리의 다른 글
MongoDB 특징 (0) | 2024.11.16 |
---|
블로그의 정보
개발하는 두부
뚜부니