HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
팀 02 : 머쓱한녀석들
팀 02 : 머쓱한녀석들
/
🚀
트러블 슈팅
/
🏐
Redis 연결 오류
🏐

Redis 연결 오류

태그
reids
속성
Done
날짜
Aug 1, 2022
작성자
Redis로 바꾸고 배포해보니….해결방안 1. redis도 docker로 띄운다2. docker 컨테이너안에서 호스트 localhost 접속하기 결론 Reference

Redis로 바꾸고 배포해보니….

토큰의 저장소를 Redis로 바꾸게 되면서 EC2 인스턴스에 Redis를 설정,설치하고 다음과 같이 dev 프로파일에 저장하고 머지를 시켰다.
로컬에서 dev 프로파일로 잘 동작하는 것을 확인했으니 아무 문제가 없겠지 하고 테스트해본 결과
notion image
500 에러가 떨어졌다. 😂
notion image
황급하게 로그를 확인하니 Redis에 접속을 못하고 있었던 것…
 
왜일까 생각하다가 스프링을 도커로 띄운다는 사실을 알게되었다. 스프링이 띄워져있는 도커의 IP를 확인해보니 localhost(127.0.0.1)와 전혀다른 IP가 떨어진다는 것을 확인할 수 있다.
notion image
이 문제로 미루어봤을 때 도커 컨테이너는 네트워크 IP를 하나 가지고 있는 독립적인 서버이며 해당 localhost는 스프링이 띄워져있는 도커 컨테이너의 IP를 가르키게 된다.
즉, EC2의 localhost와 도커 컨테이너의 localhost가 다르기 때문에 접속이 안되는 것이였다. ( 무작정 좋다고 쓰다가 이런 꼴 납니다…)
그럼 어떻게 해결해야할까?
 

해결방안

1. redis도 docker로 띄운다

redis도 docker로 띄운 뒤 redis:port와 같은 방법으로 바인딩해준다.
docker-compose를 사용하면 모든 컨테이너가 동일한 네트워크 영역대를 사용하기 때문에 컨테이너간의 통신이 가능하며 서비스 이름이 해당 컨테이너를 지칭하는 DNS가 된다!
하지만 현재 docker-compose를 사용할 때 완전히 꺼버리고 다시 띄우기 때문에 영향이 간다고 생각해 다른 방법을 찾아보았다.
 

2. docker 컨테이너안에서 호스트 localhost 접속하기

먼저 docker-compose 파일을 수정해줘야 한다.
다음과 같이 추가해줘서 host.docker.internal을 열어준다.
이후 스프링의 redis host 설정에 host.docker.internal를 입력해주게 되면 도커 컨테이너에서 외부 호스트에 접근할 수 있게 된다.
설정해준 뒤 실행하게 되면 다음과 같이 잘 동작하는 것을 볼 수 있다.
notion image
 

결론

무슨 기술을 쓰던 기본이 중요하다는 것을 다시 한번 깨닭게 되었다.
컨테이너마다 독립적인 ip를 가진다는 것을 알지 못하여 생기게 된 트러블 슈팅이기 때문에 기본을 알았다면 헤매지 않았을 것이다.
그래도 지금이라도 알았으니 다행이라는 마음을 가지고 있다.
 

Reference

OKKY | 리눅스 도커 레디스, 스프링 연결 문제. 부탁드립니다.
안녕하세요, 리눅스에서 도커 컴포즈로 레디스와 스프링 연결에 문제가 있는데, 지금까지도 해결을 못해서 도움을 구해봅니다. 4시간 삽질하고도 감이 안잡혀 부탁드립니다. 도커 컴포즈는 아래와 같습니다. 도커 파일은 아래와 같습니다. 해당 컴포즈를 로컬에서 실행할땐 정상적으로 api가 작동이 됩니다. 근데 서버에서 컴포즈를 하면 api에 문제가 생깁니다. 이처럼 도커 컴포즈를 통해서 레디스와 스프링부트 모두 정상적으로 컨테이너에 올라갔는데.
OKKY | 리눅스 도커 레디스, 스프링 연결 문제. 부탁드립니다.
https://okky.kr/article/1058298
OKKY | 리눅스 도커 레디스, 스프링 연결 문제. 부탁드립니다.
docker container에서 localhost 접속하기 host.docker.internal
Docker Compose를 이용해 여러개의 도커 컨테이너를 실행해서 하나의 어플리케이션을 담당한다고 했을때, 하나의 네트워크로 연결해 사용하게 되는데요. 정작 컨테이너에서 로컬 서버에는 어떻게 접근해야 할까요? 제 맥북에서 사용중인 Docker에는 컨테이너가 아직 PostgreSQL 하나밖에 없어서, 이 컨테이너를 이용해서 시도 해 보겠습니다. ​ 제 컨테이너 같이 DB 서버라면 사실 필요할 일은 없지만, Apache나 NginX 같은 웹 서버의 경우는 흔하게 필요한 상황이 발생 할 수 있겠습니다.
docker container에서 localhost 접속하기 host.docker.internal
https://shanepark.tistory.com/209
docker container에서 localhost 접속하기 host.docker.internal
 
spring: redis: host: localhost password: port: 6379
extra_hosts: - "host.docker.internal:host-gateway"