Problem
: aws ec2에서 RabbitMQ를 docker-compose로 실행시켰는데 RabbitMQ Management인 'ec2 ip:15672'에 접속하면, 'ec2 ip에서 접근을 거부하였습니다' 에러 발생
Environment
- aws ec2
- docker-compose에서 포트 포워딩 설정 완료
- 인바운드 규칙에서 15672 포트 설정 완료
DOCKER-COMPOSE.YML
DOCKER-COMPOSE.YML
-----------------------------
version: "3"
networks: # network를 먼저 정의해줘야 services에서 붙일 수 있다
my-network: # 네트워크 이름
external: true # 이미 생성되어있는 네트워크 사용
# docker에 설치할 파일들과 설정들
services:
# 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/mnesia/
- ./.docker/rabbitmq/logs/:/var/log/rabbitmq/
- ./.docker/rabbitmq/etc/:/etc/rabbitmq/
environment:
- RABBITMQ_ERLANG_COOKIE=내가만든쿠키
- RABBITMQ_DEFAULT_USER=너를위해구웠지
- RABBITMQ_DEFAULT_PASS=식사는없어배고파도
networks:
- my-network
EC2 Inbound Rule
Approach
- 로컬에서 테스트
- 배포 서버에서 사용중인 docker-compse.yml과 똑같은 docker-compose.yml을 작성
- 이후 로컬에서 실행중인 RabbitMQ 컨테이너 & 이미지를 삭제
- 새로 작성한 docker-compose.yml 를 사용하여 RabbitMQ 실행
*결과 => localhost:15672 접속 성공
- 배포 서버 테스트
- EC2 Inbound Rule에 22, 443, 80, 15672, 5672 port 모두 추가
- 'docker-compose up -d' 로 RabbitMQ 컨테이너 실행
*결과 => 'ec2 ip:15672' 접속 실패 (ec2 ip에서 접근을 거부하였습니다)
- 로그 추적
- 'docker logs RabbitMQ컨테이너'를 사용하여 로그 확인
*결과 => 이상 없이 정상적으로 실행되었음
- 'docker logs RabbitMQ컨테이너'를 사용하여 로그 확인
- RabbitMQ 상태 확인
- RabbitMQ의 실행 상태를 확인해보기 위해 'docker exec -it RabbitMQ컨테이너 bash' -> 'rabbitmqctl status' 실행
- 제일 밑의 Listeners에서 Listener 확인
Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 - 공식 docs 확인 결과, management에 접속하기 위해서는 Listeners에 'port: 15672, protocol: HTTP API' 가 있어야 됨을 확인 (https://www.rabbitmq.com/docs/management#configuration)
- docs의 Getting Started를 읽어보니 Management Plugin을 사용하기 위해서는 'rabbitmq-plugins enable rabbitmq_management' 명령어를 사용하여 활성화를 해야함을 확인하고 명령어 실행
Result
접속 성공!!!!
Reference