에러메세지 / 문제상황

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 포트 바인딩 에러는 대부분 "다른 앱이 해당 포트를 쓰고 있음" → 포트를 바꾸거나 기존 앱을 중지하면 해결 가능