Docker network와 host 문제

임현규·2023년 3월 8일
0

db와 연결 오류

 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
ubuntu-java-api-server-1  |
ubuntu-java-api-server-1  | The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

위의 메세지 같은 오류가 발생했다. jdbc가 mysql 컨테이너와의 연결을 실패하다니.. 이유가 뭘까??

Docker network와 컨테이너 특성 파악하기

나의 application.yml에는 jdbc 연결 host 설정이 localhost:3306이였다. 이것은 docker container와 network에 대해서 정확히 인지하지 못했기 때문에 발생한 문제이다.

Docker-compose를 활용해 3개의 컨테이너를 지정하고 실행하면 다음과 같다.
나의 java-application 컨테이너는 application.yml을 바인드 마운트 중이다. 이 때 localhost는 java-application의 localhost이지 호스트 머신의 localhost가 아니다. 그렇기 때문에 Mysql 컨테이너에 접근하려면 해당 IP를 알아야한다.

Docker에서 컨테이너 IP를 알 수 있지만 알기 쉽지 않다. 이런 상황에 대비해서 Docker는 Docker-network를 제공하는데 Docker-network로 묶인 컨테이너들은 해당 IP를 컨테이너 명을 통해 접근할 수 있다.

해결

mysql의 컨테이너명은 mysql이였는데 jdbc 호스트 설정을 mysql로 주니 문제가 해결되었다.

profile
엘 프사이 콩그루

0개의 댓글