ec2에서 docker-compose를 사용하여 rabbitmq를 실행할 때 발생했던 오류들의 해결과정을 정리해보았다
docker로 실행시킨 rabbitmq 컨테이너 로그는 "docker logs 컨테이너이름" 으로 확인할 수 있으니 확인해보자
origin - Info
- server
- aws ec2
- ubuntu 22.04.5 LTS
- docker-compose
- version-3
- RabbitMQ
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: rabbitmq
ports:
- "5672:5672" # default
- "15672:15672" # management plugin
volumes:
- ./.docker/rabbitmq/data/:/var/lib/rabbitmq/
- ./.docker/rabbitmq/logs/:/var/log/rabbitmq/
- ./.docker/rabbitmq/etc/:/etc/rabbitmq/
environment:
- RABBITMQ_ERLANG_COOKIE=내가만든쿠키
- RABBITMQ_DEFAULT_USER=누진세
- RABBITMQ_DEFAULT_PASS=1234
networks:
- my-network
1. 로그 파일 접근 에러
Error
{{cannot_log_to_file,"/var/log/rabbitmq/rabbit@abcdefghijkl.log",eacces}
원인
- 권한 문제: RabbitMQ 컨테이너가 "/var/log/rabbitmq/" 경로에 로그 파일을 기록하려 할 때 권한이 없어서 에러 발생
해결 방법
- 해당 경로 존재하는지 확인
: 나의 경우 "/var/log"에 rabbitmq 디렉터리 조차 없어서 만들어 준 후 권한을 수정했다.
만약 해당 경로가 존재하지 않는다면 "mkdir" 을 사용해서 디렉터리를 먼저 만들어주자 - 디렉터리 권한 설정
: "sudo chmod 777 -R /var/log/rabbitmq" 를 사용하여 에러 메시지에 표시된 경로에 '읽기/쓰기' 권한을 부여한다.
이를 통해 컨테이너의 RabbitMQ 프로세스가 로그 파일을 기록할 수 있다
2. .erlang.cookie 접근 권한 문제
Error
reason: {"Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only"}
원인
- ".erlang.cookie" 파일은 RabbitMQ 클러스터링 및 node 간 인증에 사용되는 파일로, 보안상 소유자만 읽고 쓸 수 있어야 한다(권한 600). 만약 이 파일의 접근 권한이 느슨하다면, RabbitMQ에서 이를 감지하여 실행을 중단한다
- 현재 RabbitMQ 컨테이너의 볼륨이 ".erlang.cookie"가 존재하는 "/var/lib/rabbitmq/"에 매핑되어 있는데, Docker는 볼륨을 매핑할 때 HOST 파일의 권한을 그대로 컨테이너에 반영한다.
- 따라서 HOST OS에서 해당 경로의 권한이 "777" 혹은 "755" 등으로 "600"보다 좀 더 권한이 열려있다면, 컨테이너 내부에서도 동일하게 느슨한 권한이 적용되기에 RabbitMQ가 이를 감지하여 실행을 중단한 것이다
해결 방법
- ".erlang.cookie" 파일의 권한 문제를 피하기 위해, data가 저장되는 볼륨을 RabbitMQ의 persistent data가 저장되는 "mnesia"에 매핑함으로써 해결
Result docker-compose.yml
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: rabbitmq
ports:
- "5672:5672" # default
- "15672:15672" # management plugin
volumes:
- ./.docker/rabbitmq/data/:/var/lib/rabbitmq/mnesia/
- ./.docker/rabbitmq/logs/:/var/log/rabbitmq/
- ./.docker/rabbitmq/etc/:/etc/rabbitmq/
environment:
- RABBITMQ_ERLANG_COOKIE=내가만든쿠키
- RABBITMQ_DEFAULT_USER=누진세
- RABBITMQ_DEFAULT_PASS=1234
networks:
- my-network
Reference
- GPT