[Docker] Docker Compose를 활용한 Spring 서버와 MySQL 연결 문제 해결하기

Y_Sevin·2023년 4월 23일
0

Spring 서버를 Docker에서 실행하면서 localhost에 존재하는 MySQL에 접근하는 데 어려움을 겪은 경험이 있습니다. 이 문제를 해결하기 위해 Docker Compose를 활용하여 컨테이너 간 통합을 구성하여 문제를 해결한 경험을 글로 적어보려 합니다.

Spring 서버를 Docker에서 실행할 때, 로컬 환경에서 사용 중인 MySQL에 연결하는 과정에서 "Communications link failure" 오류가 발생했습니다. 이는 Docker 컨테이너 내부에서 localhost로 접근할 때, 호스트 머신의 localhost가 아닌 컨테이너 내부의 localhost로 해석되어 발생하는 문제였습니다.

해결 - Docker Compose를 활용한 통합 설정

1. Docker Compose 파일 작성
먼저, Docker Compose를 사용하여 Spring 서버와 MySQL을 함께 실행할 수 있는 환경을 설정했습니다. docker-compose.yml 파일을 작성하여 서비스 간 네트워크를 공유하도록 설정했습니다.

version: '3'

services:
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: my_database
      MYSQL_USER: my_user
      MYSQL_PASSWORD: my_password
    ports:
      - "3306:3306"

  spring-server:
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - mysql
    ports:
      - "8080:8080"

2. Spring 서버 설정 수정
Spring 서버의 데이터베이스 연결 설정을 localhost가 아닌 MySQL 컨테이너의 이름으로 수정했습니다.

spring:
  datasource:
    url: jdbc:mysql://mysql:3306/my_database
    username: my_user
    password: my_password

3. 도커 컴포즈 실행
아래 명령어로 Docker Compose를 실행하여 Spring 서버와 MySQL을 함께 띄웠습니다.
Docker Compose를 활용하여 Spring 서버와 MySQL을 함께 실행하면, 컨테이너 간의 네트워크 설정을 통해 localhost 문제를 해결할 수 있었습니다.

docker-compose up
profile
매일은 아니더라도 꾸준히 올리자는 마음으로 시작하는 개발블로그😎

0개의 댓글