Docker 실행 시 "Error response from daemon: port is already allocated" 포트 충돌 오류 해결: 윈도우 환경에서 점유 중인 PID 확인 및 프로세스 강제 종료 가이드


Error Zero Lab

소프트웨어 에러 해결 & 오피스 가이드 | 전문가의 정확한 솔루션

홈 > Docker/DevOps > Docker 실행 시 "Error response from daemon: port is already allocated" 포트 충돌 오류 해결: 윈도우 환경에서 점유 중인 PID 확인 및 프로세스 강제 종료 가이드

Docker 실행 시 "Error response from daemon: port is already allocated" 포트 충돌 오류 해결: 윈도우 환경에서 점유 중인 PID 확인 및 프로세스 강제 종료 가이드

Docker 컨테이너를 실행하거나 docker-compose up 명령을 내릴 때 "Error response from daemon: port is already allocated" 또는 "Bind for 0.0.0.0:8080 failed: port is already allocated"라는 오류가 발생하는 것은 개발 환경에서 매우 흔한 일입니다.

이 가이드는 2026년 현재 Windows 10/11 및 WSL2 환경에서 해당 오류를 발생시키는 근본 원인을 진단하고, 점유 중인 프로세스를 강제 종료하여 문제를 즉시 해결하는 단계를 설명합니다.

coding setup

1. 문제 정의 (Problem Description)

이 오류는 Docker 데몬이 호스트(Windows)의 특정 네트워크 포트를 컨테이너에 바인딩하려 할 때, 이미 다른 프로세스나 서비스가 해당 포트를 점유하고 있어 연결에 실패했음을 의미합니다.

  • 발생 시점: docker run, docker-compose up, 또는 중단된 컨테이너 재시작 시
  • 주요 증상: 컨테이너가 Created 상태에 머물고 Up 상태로 전환되지 않으며, 로그에 해당 메시지 출력

2. 주요 발생 원인 (Root Causes)

원인 구분 설명
좀비 컨테이너 이전 실행 시 정상 종료되지 않아 Docker 엔진에 바인딩 정보가 남은 경우
로컬 서비스 점유 IIS(80), SQL Server(1433), Nginx 등 로컬 앱이 포트를 선점한 경우
Hyper-V 예약 포트 Windows 시스템이 동적 포트 범위로 특정 구간을 예약하여 접근을 막는 경우
WSL2 내부 점유 Windows 호스트가 아닌 WSL2 리눅스 커널 내부에서 프로세스가 포트를 잡고 있는 경우

3. 단계별 해결 방법 (Step-by-Step Solutions)

방법 1: 포트 점유 프로세스 식별 및 강제 종료 (CLI)

가장 빠르고 확실한 방법입니다. 관리자 권한으로 실행 중인 프로세스를 찾아 종료합니다.

1단계: 관리자 권한으로 PowerShell 실행 시작 메뉴에서 PowerShell을 검색한 뒤 [관리자 권한으로 실행]을 클릭합니다.

2단계: 포트를 사용 중인 PID(프로세스 ID) 확인 충돌이 발생한 포트 번호(예: 8080)를 아래 명령어에 입력합니다. powershell netstat -ano | findstr :8080 * 결과 행의 가장 오른쪽 숫자가 해당 포트를 점유 중인 PID입니다. (예: 1234)

3단계: 프로세스 정보 확인 및 강제 종료 확인된 PID를 사용하여 프로세스를 즉시 종료합니다. powershell

어떤 프로그램인지 확인 (선택 사항)

tasklist /FI "PID eq 1234"

프로세스 강제 종료

taskkill /F /PID 1234

⚠️ PID 4 (System) 대응 방법 만약 PID가 4로 표시된다면 이는 Windows 핵심 서비스(주로 IIS)입니다. 80번 포트 충돌 시 다음 명령어로 IIS 서비스를 중지하십시오. ```powershell Stop-Service -Name W3SVC

또는

iisreset /stop

방법 2: WSL2 환경 내부 프로세스 확인

Windows PowerShell에서 포트가 잡히지 않는데 Docker 오류가 발생한다면, WSL2 배포판 내부에서 포트가 점유되었을 가능성이 큽니다.

  1. 사용 중인 WSL2 터미널(Ubuntu 등)을 엽니다.
  2. 다음 명령어로 내부 프로세스를 확인합니다. ```bash sudo lsof -i :8080 # 또는 sudo netstat -tulpn | grep :8080

  3. 확인된 PID를 종료합니다. ```bash sudo kill -9

방법 3: Docker 리소스 초기화 및 엔진 재시작

프로세스를 종료해도 오류가 지속된다면 Docker 네트워크 잔재를 정리해야 합니다.

  1. 사용하지 않는 모든 리소스 정리 ```powershell docker compose down docker system prune -f docker network prune -f

  2. Docker Desktop 완전 재시작 시스템 트레이의 Docker 아이콘을 우클릭하고 [Restart Docker Desktop]을 선택합니다. 만약 네트워크 바인딩 세션이 만료되지 않는다면 Windows를 '다시 시작'하는 대신 '시스템 종료' 후 다시 켜는 것(Fast Startup 세션 초기화)이 더 효과적입니다.

computer error screen

방법 4: Hyper-V 예약 포트 확인 (Access Denied 발생 시)

포트가 사용 중이지 않은데도 "Access Denied"나 "Allocated" 오류가 뜬다면 Windows가 해당 포트를 예약한 것입니다.

  1. 제외된 포트 범위 확인 ```powershell netsh int ipv4 show excludedportrange protocol=tcp

  2. 대응 전략 사용하려는 포트가 위 리스트의 범위에 포함되어 있다면, 다음 명령어로 동적 포트 범위를 재설정하거나 docker-compose.yml에서 호스트 포트를 변경하십시오. ```powershell netsh int ipv4 set dynamicport tcp start=49152 num=16384

4. 예방을 위한 전문가 팁

  • 💡 명시적 종료 습관: 컨테이너 종료 시 창을 그냥 닫지 말고 docker-compose down 명령을 사용하여 네트워크 자원을 완전히 해제하십시오.
  • 💡 로컬 서비스 수동 설정: SQL Server나 IIS 등 로컬 프로그램의 서비스를 '자동'에서 '수동'으로 변경하여 부팅 시 포트 선점을 방지하십시오.
  • 💡 포트 전략: 80, 443 등 공용 포트 대신 8081, 3307 등 자신만의 커스텀 포트를 호스트 포트로 할당하는 것이 가장 안전합니다.

5. 요약 테이블

해결 방법 권장 상황 난이도 성공률
netstat / taskkill 일반적인 프로세스 충돌 시 낮음 매우 높음
Stop-Service W3SVC PID 4(System/IIS) 충돌 시 낮음 높음
WSL2 lsof 확인 호스트에서 확인 안 되는 충돌 시 보통 높음
Port 범위 재설정 Hyper-V 예약 포트 문제 발생 시 높음 100%

[연관 가이드 및 추가 정보]

🔗 Microsoft 공식 솔루션 참고

이 문제의 보다 자세한 기술 정보나 공식 지원 내용은 아래 마이크로소프트 공식 문서를 통해 확인하실 수 있습니다.

Microsoft Support: 포트 충돌 및 엔드포인트 식별 방법 가이드
ℹ️ 참고사항
본 가이드는 공식 문서와 검증된 솔루션을 기반으로 작성되었습니다. 레지스트리 편집이나 시스템 파일 수정 전에는 반드시 백업을 수행하세요. 문제가 지속되면 공식 지원 채널에 문의하시기 바랍니다.

댓글

이 블로그의 인기 게시물

윈도우 11 '연결됨, 인터넷 없음' 오류 해결: DNS 캐시 초기화와 IPv4 수동 설정 가이드

챗봇의 외부 DB 연동 오류 해결: Botpress의 Execute Code와 Voiceflow의 API Step을 활용한 JSON 데이터 파싱 및 변수 매핑 비교

노션 포뮬러 2.0 `filter()`와 `map()` 함수를 활용해 관계형 데이터베이스에서 특정 조건의 팀원 이름만 추출하여 리스트로 자동 생성하는 방법