원격서버에서 mongoDB 컨테이너를 실행시키기 위해서
docker compose up --build -d 실행할 컨테이너
명령어로 빌드 후 백그라운드에서 실행을 시켰는데, 이상하게 실행을 시키고
docker ps -a 로 목록을 확인해보면 자꾸 exited 가 되는 상황이 발생했다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ddfa717bdad mongodb/mongodb-community-server:5.0.17-ubuntu2004 "python3 /usr/local/…" 59 seconds ago Exited (51) 54 seconds ago mongo_new
그래서
docker logs 컨테이너이름
으로 로그를 확인해보니 mongodb.key 권한때문에 접근을 할 수 없다고 하길래,
로컬에서 mongodb.key를 생성하고, chmod 600 으로 권한을 생성한 뒤에 해당 원격서버로 scp 명령어를 통해 복사까지 하고, docker compose yml 파일도 수정했다.
scp -i {ssh key 경로} /{mongodb생성된 로컬의 경로}/mongodb.key ubuntu@{원격서버 퍼블릭 IP}:/home/ubuntu/mongodb.key
docker-compose.yml
services:
mongodb:
image: mongodb/mongodb-community-server:5.0.17-ubuntu2004
container_name: mongo_new
environment:
MONGODB_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} # 기본 관리자 계정의 사용자 이름
MONGODB_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} # 기본 관리자 계정의 비밀번호
ports:
- "${MONGO_PORT}:${MONGO_PORT}"
volumes:
- db-data:/mongo
- ${MONGO_KEY_FILE}:/etc/mongodb.key
command: mongod --replSet rs0 --keyFile /etc/mongodb.key --bind_ip_all
{MONGO_KEY_FILE} 파일에는 해당 파일이 복사된 원격서버의 path 경로를 env에다가 설정해줬다.(로컬과 구분짓기 위함)
/home/ubuntu/mongodb.key
로 설정이 되어있다. (원격서버의 프로젝트 디렉토리 경로로 복사하면 된다.)
그리고 다시,
명령어로 해당 컨테이너를 삭제후 재빌드를 하려고 보니!

이런에러가.. 컨테이너를 생성할 디스크 공간이 없다고 한다..
df -h
명령어를 통해 디스크 공간을 확인해보니

....... 왤케 마니 썼지?
🤖 AI 의 답변

그래서
sudo docker system prune -a
명령어를 통해 불필요한 docker 컨테이너, 이미지 등을 정리를 해서
Total reclaimed space: 90.03MB
이정도의 공간을 확보했으나 턱없이 부족하다.
그래서 docker volume 도 정리해줬다.
결과적으로, Total reclaimed space: 2.335GB 공간을 확보했다.

그리고 캐시 파일들도 정리해주어서 2.4G를 확보할 수 있었다.
그럼에도 여전히 Exited (1) 되는 상황이 발생
다시 로그를 확인해보니
error opening file: /etc/mongodb.key: bad file
여전히 문제가 발생.
/etc/mongodb.key 파일을 읽지 못해 인증 설정이 실패했다는데
key 파일 경로가 분명
-rw------- 1 ubuntu ubuntu 1024 Sep 9 09:04 /home/ubuntu/mongodb.key
로 잘 확인이되고, 권한도 줬는데 대체 뭐가 문제인 걸까..
..알고보니복사한 경로가 잘못되어있었다..
프로젝트 내부가 아닌 다른 경로에 만들어졌기 때문에 당연히 못찾을 수 밖에.. 완전 바보
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
067bf0d3a200 mongodb/mongodb-community-server:5.0.17-ubuntu2004 "python3 /usr/local/…" 2 minutes ago Up 2 minutes 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp mongo_new
경로를 고치고 docker ps -a 를 해보니 이제 잘 실행된다!
[정리👉]
추가로 로컬에 mongodb.key를 생성하고 ec2원격서버에 복사하는 방법
openssl rand -base64 756 > mongodb.key
로컬에 저장된 mongodb.key 의 경로를 복사 후
scp -i {ec2서버의 pem키 경로 (ssh인증을 위함)} /로컬의/경로/mongodb.key ubuntu@ec2서버의퍼블릭IP주소:/복사할/원격서버의/path/mongodb.key
를 통해 복사를 한뒤
원격서버에서
chmod 600 /복사한/원격서버/경로/mongodb.key
권한을 주고 docker-compose.yml 파일을 수정하면 된다.
version: '3'
services:
mongodb:
image: mongodb/mongodb-community-server:5.0.17-ubuntu2004
container_name: mongo_new
environment:
MONGODB_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} # 기본 관리자 계정의 사용자 이름
MONGODB_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} # 기본 관리자 계정의 비밀번호
ports:
- "${MONGO_PORT}:${MONGO_PORT}"
volumes:
- db-data:/mongo
- ${MONGO_KEY_FILE}:/etc/mongodb.key
command: 'mongod --replSet myReplicaSet --keyFile /etc/mongodb.key --bind_ip_all'
나같은 경우에는 위에도 설명했듯 로컬환경과 분리하기 위해서 MONGO_KEY_FILE 환경변수를 설정하여 로컬 env에는 로컬에 생성한 mongodb.key를, 원격서버에 env파일에는 복사한 원격서버의 경로를 저장해놓았다.
저번부터 자꾸 경로문제가 발생하는데,
정신 🍒자!
참고
mongod-keyFile-시-permissions-on-etcmongodbkey-are-too-open-또는-etcmongodbkey-bad-file