에러메세지 / 문제상황
Docker 컨테이너(MySQL)를 실행하려 하자 다음과 같은 에러 발생:
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 → 127.0.0.1:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address is normally permitted.
→ docker start 또는 docker run 실행 시 3306 포트 충돌로 인해 컨테이너 시작 실패
원인
Windows에서
이미 다른 프로세스가 3306 포트를 선점 중
이어서 Docker가 동일 포트에 바인딩하지 못함.
(Docker는 기본적으로 MySQL 컨테이너에 3306 포트를 사용)
시도 1
WSL(Ubuntu) 환경에서 포트 사용 확인:
lsof -i:3306
❌ 결과 없음 → WSL 내부에서는 포트 점유 프로세스가 보이지 않음
시도 2
Windows PowerShell에서 포트 점유 확인:
netstat -aon | findstr :3306
→ PID 6700이 3306 포트를 LISTENING 상태로 사용 중인 것을 확인
tasklist | findstr 6700
→ 실제 어떤 프로세스인지 확인 후 강제 종료:
taskkill /PID 6700 /F
해결책
3306 포트를 점유하고 있는 백그라운드 MySQL 프로세스 또는 기타 앱을 종료하여 포트를 비워줌
docker run
명령이 정상적으로 실행됨
회고 및 정리
- WSL에서 보이지 않는 포트 충돌은 Windows 쪽 프로세스일 가능성이 높다
- 이럴 땐 netstat과 tasklist를 활용해 포트를 선점한 프로세스를 찾아내는 것이 핵심
- Docker 포트 바인딩 에러는 대부분 "다른 앱이 해당 포트를 쓰고 있음" → 포트를 바꾸거나 기존 앱을 중지하면 해결 가능