Spring 서버를 Docker에서 실행하면서 localhost에 존재하는 MySQL에 접근하는 데 어려움을 겪은 경험이 있습니다. 이 문제를 해결하기 위해 Docker Compose를 활용하여 컨테이너 간 통합을 구성하여 문제를 해결한 경험을 글로 적어보려 합니다.
Spring 서버를 Docker에서 실행할 때, 로컬 환경에서 사용 중인 MySQL에 연결하는 과정에서 "Communications link failure" 오류가 발생했습니다. 이는 Docker 컨테이너 내부에서 localhost로 접근할 때, 호스트 머신의 localhost가 아닌 컨테이너 내부의 localhost로 해석되어 발생하는 문제였습니다.
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