인프런 커뮤니티 질문&답변
EC2 <-> RDS 연동 후 로컬에서의 Docker에 대해 궁금한 점이 있습니다.
해결된 질문
작성
·
31
1
services:
springboot-twitter:
container_name: springboot-twitter
image: springboot-twitter:latest
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql-twitter:3306/twitterdb
- SPRING_DATASOURCE_USERNAME=dev
- SPRING_DATASOURCE_PASSWORD=dev123
networks:
- twitter-network
depends_on:
mysql-twitter:
condition: service_healthy
mysql-twitter:
container_name: mysql-twitter
image: mysql:9.3
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: twitterdb
MYSQL_USER: dev
MYSQL_PASSWORD: dev123
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
interval: 10s
timeout: 5s
retries: 5
ports:
- "3307:3306"
networks:
- twitter-network
networks:
twitter-network:
driver: bridge
로컬 환경에서 mysql에 대한 이미지가 떠있어야 spring boot application을 실행해야 DB connection도 잘 이루어진다고 이해했습니다.
여기서 궁금한 점이 있습니다.
로컬 환경에서 docker compose up -d를 한 경우 compose 파일에서 spring boot 이미지도 함께 띄워놔서 application을 실행할 때 8080 already in use 오류가 발생합니다. 이렇게 될 경우에는 docker-compose.yaml을 수정하거나 docker compose up -d mysql-twitter 커맨드를 실행해서 mysql만 띄워야 하는지 궁금합니다.
답변 1
0
안녕하세요 석석님!
좋은 질문 주셔서 감사합니다.
말씀해주신 것처럼 docker compose up -d를 실행하면 compose 파일에 정의된 모든 서비스가 함께 실행됩니다. 따라서 springboot-twitter 컨테이너도 동시에 올라가게 되고, 이 상태에서 로컬 IDE에서 Spring Boot 애플리케이션을 다시 실행하면 이미 컨테이너가 8080 포트를 사용 중이기 때문에 8080 already in use 오류가 발생하게 됩니다. 이 현상 자체는 정상적인 동작입니다.
이럴 경우 로컬 개발 단계에서는 DB만 Docker로 띄우고, 애플리케이션은 IDE에서 직접 실행하는 방식을 가장 많이 사용합니다. 즉, 말씀하신 것처럼 docker compose up -d mysql-twitter 처럼 특정 서비스만 실행하거나, 아예 로컬 전용 compose 파일을 만들어 MySQL만 정의해두는 방식이 실무에서도 많이 쓰입니다. 이렇게 하면 포트 충돌 없이 편하게 디버깅과 개발이 가능합니다.
감사합니다.




