Docker Compose 연결 문제 (Homebrew와 Docker PostgreSQL) (Day10-0214)

왕감자·2025년 2월 14일

2025 내일배움캠프

목록 보기
13/39
post-thumbnail

✅ 문제 상황

  • 환경: Docker Compose를 사용하여 데이터베이스 연결 테스트 중
  • 문제 발생:
    • docker-compose.yml 파일이나 Docker Compose 설정 자체에는 문제 없음 (다른 팀원들은 정상적으로 연결)
    • 나만 연결 안 됨
  • 특정 문제:
    • postgres 데이터베이스에는 정상적으로 연결 << ?
    • 내가 연결하려는 fourseason 데이터베이스에는 연결되지 않음

✅ 문제 해결 시도

  1. Docker Compose 리셋 / Docker 컨테이너 삭제 ➡ 안됨
    docker compose down / docker compose up
    docker ps -a
    docker rm db9c9189e4e2
  1. PostgreSQL 포트 상태 확인, 포트 점유 프로세스 종료 ➡ 계속 재실행 됨
    sudo lsof -i :5432
    kill 9 {PID}
    - Mac에서는 brew services로 설치한 경우, kill로 프로세스를 종료해도 자동으로 다시 실행
  1. 실행 중인 PostgreSQL 프로세스 확인 ➡ ❗️현재 PostgreSQL이 Homebrew를 통해 실행 중
    ps -ef | grep postgres

✅ 문제 원인

  • Homebrew로 설치된 PostgreSQL 실행 중
    • Homebrew에서 설치한 PostgreSQL이 도커보다 먼저 5432 포트 점유

✅ 해결 방법

  • Homebrew로 설치된 PostgreSQL 종료



🤔 해결 과정에서 생긴 궁금증

1️⃣ 도커는 왜 포트 충돌을 일으키지 않았을까?

  • 일반적으로 같은 포트를 사용하는 두 개의 프로세스가 동시에 실행되면 충돌 발생
  • 도커 컨테이너는 별도의 OS를 가지는 것과 유사한 환경이기 때문에 호스트 OS와 컨테이너 OS에서 각각 동일한 포트를 사용할 수 있음

2️⃣ Spring Boot는 왜 도커의 데이터베이스가 아니라 로컬의 PostgreSQL을 먼저 바라봤을까?

  • 기본적으로 Spring Boot는 로컬 환경의 데이터베이스를 먼저 연결 시도함
  • 도커의 PostgreSQL을 먼저 바라보려면 host.docker.internal 활용

3️⃣ brew uninstall postgresql@14를 했는데도 왜 로컬 PostgreSQL이 종료되지 않았을까?

  • brew uninstall postgresql@14을 실행하면 PostgreSQL 패키지가 삭제되지만 이미 실행 중인 프로세스는 자동으로 종료되지 않음
  • 따라서 제거하기 전에 먼저 실행 중인 PostgreSQL을 종료해야함



💡 결론

  • PostgreSQL을 Homebrew로 설치해서 brew services start postgresql을 실행하는 순간 로컬 PostgreSQL이 5432 포트를 점유
  • Spring Boot에서 데이터베이스를 연결할 때 로컬 PostgreSQL을 먼저 시도 (로컬 머신 Host OS)
  • 도커 컨테이너는 별도의 OS (별도의 네트워크 공간 사용?) - 도커 입장에서는 5432 포트가 열려있지 않아서 문제 x

0개의 댓글