Docker로 배포한 Spring boot와 mongoDB 연동 ( 부제 : 도커 네트워크 인터페이스는 독립적이다. )

박해인·2025년 2월 13일
0

DevOps

목록 보기
2/2

나의 상황 🤔
내 서버에 mongoDB를 잘 구축했고 telnet 명령어를 통해 mongoDB 포트도 잘 연결되는 것을 확인했다. 하지만 도커 컨테이너로 배포한 서버와 연동해보려 하니 자꾸만 connection refused error가 떴다..

Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 

암튼 대략적으로 이런 에러가 자꾸 떴는데... 이유를 모르겠었다..

알고보니 도커는 기본적으로 '브리지 네트워크(bridge network)'를 사용하는데, 이는 독립적인 네트워크 인터페이스 로 같은 서버(같은 호스트)에서 돌아가고 있더라도 도커 네트워크 스페이스 외의 아이들 ( 도커 컨테이너를 제외한 나머지 서버 프로그램들?) 을 다른 네트워크라고 여긴다는 것이다.
즉, 도커입장에서 localhost=같은 네트워크 시스템는 같은 도커 네트워크 인터페이스에 있는 애들 뿐인것이다. ( * 같은 호스트(서버)의 다른 컨테이너는 같은 localhost )

해결책?

도커 컨테이너와 호스트(서버 = 나의 경우에는 mongoDB) 간 통신을 하기 위해서는 그냥 도커 인터페이스의 ip를 확인해서 spring에 연결 설정하는 ip만 변경해주면 된다.

$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:daff:fe6c:46e3  prefixlen 64  scopeid 0x20<link>
        ether 02:42:da:6c:46:e3  txqueuelen 0  (Ethernet)
        RX packets 312896  bytes 71769036 (71.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 227443  bytes 75636874 (75.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  

나같은 경우에는 docker0의 ipv4 주소는 172.17.0.1 이였다.
이를 그냥 설정만 바꿔주면 성공적으로 연결이 된다.


이 사실을 모르고 계속해서 포트 청기백기 한 나 ... 슬프다.
이참에 도커 네트워크 인터페이스에 대해서 알아보자

→ 알아보았다.
도커네트워크 인터페이스 vs 네트워크 인터페이스

profile
갓생살고싶어라

0개의 댓글