TroubleShooting & Study/Infra

[RabbitMQ] docker-compose 실행시 오류 해결

DH_0518 2024. 12. 18. 12:32

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/" 경로에 로그 파일을 기록하려 할 때 권한이 없어서 에러 발생

 

해결 방법

  1. 해당 경로 존재하는지 확인
    : 나의 경우 "/var/log"에 rabbitmq 디렉터리 조차 없어서 만들어 준 후 권한을 수정했다.
    만약 해당 경로가 존재하지 않는다면 "mkdir" 을 사용해서 디렉터리를 먼저 만들어주자
  2. 디렉터리 권한 설정
    : "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

 

Unable boot rabbitmq 3.9 on docker compose: failed to open log file at '/var/log/rabbitmq/rabbit@xxxxxx_upgrade.log', reason: pe

Hello I am expirementing with docker compose, the update to rabbitmq 3.9 but I always get the following error regarding permission problems. If I do the same exercise in rabbitmq 3.8, it works with...

github.com

 

RabbitMQ: "Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only" · Issue #2048 · laradock/laradock

Info: Docker version ($ docker --version): Docker version 18.09.2, build 6247962 Laradock commit ($ git rev-parse HEAD): 254a9ae System info (Mac, PC, Linux): PC System info disto/version: Windows ...

github.com

  • GPT