왜 3306 포트 오류가 나올까?
도커 MySQL과 로컬 MySQL이 둘 다 3306 포트를 사용하려고 해서 충돌하기 때문이다.
도커는 포트를 실제 OS에서 공유함. 즉, “가상환경”이라도 포트는 절대 가상화되지 않는다
대표 오류 메세지
Ports are not available: listen tcp 0.0.0.0:3306: bind: address already in use
- 3306 이미 누가 쓰고 있어서 도커가 못 씀
해결 방법
1. 3306 점유 프로세스 확인
lsof -i :3306
문제가 있는 경우
mysqld 1234 ...
com.docke 5678 ...
mysqld (로컬 MySQL) 포트 때문에 충돌이 난다.
2. 로컬 MySQL 중지
brew services stop mysql
맥은 macOS의 기능 중 하나인 launchd 서비스가 자동 실행중일 수도 있다.
launchctl list | grep -i mysql
launchctl remove homebrew.mxcl.mysql@8.0
자동 실행을 멈춰준다.
프로세스 강제 종료가 필요하다면
sudo pkill mysqld
sudo pkill mysql
3. 포트 점유 완전히 풀렸는지 재확인
lsof -i :3306
docker-proxy / com.docker.backend만 남아있어야 성공이다.
배운 점
- Docker와 로컬 MySQL 둘 다 3306을 원하면 충돌한다.
- Docker 세팅을 잘못 한 것이 아니라, 로컬 포트 충돌로 실행 불가한 것이다.
- 팀 프로젝트에서는 로컬 MySQL을 끄고 Docker만 사용해야 환경이 통일된다
'Dev. > Error.' 카테고리의 다른 글
| [Error] Port 8080 was already in use (1) | 2025.11.11 |
|---|---|
| [Error] MySQL 버전 충돌 (macOS/Homebrew) (0) | 2025.11.08 |
| [Error] JPA 양방향 연관관계에서 무한 루프문제 해결 (0) | 2025.11.06 |
| [Error] 자바에서 객체의 동등성과 동일성 문제 (0) | 2025.10.29 |
| [Error] incompatible types: Object[] cannot be converted to String[] (0) | 2025.10.13 |