-
[ASP.NET Core] Kestrel "Failed to bind to address" 오류, 포트 점유 해결Microsoft .NET/ASP.Net & ASP.Net Core 2026. 11. 10. 00:23

Kestrel이 지정한 포트를 이미 다른 프로세스가 잡고 있어서 발생하는
IOException과 해결 방법입니다.절차
- 에러 메시지 확인
- 포트를 점유한 프로세스 찾기
- 해결 1: 점유 프로세스 종료
- 해결 2: 포트 변경
- 개발 환경에서 자주 있는 케이스
1. 에러 메시지
System.IO.IOException: Failed to bind to address http://127.0.0.1:5000: address already in use. ---> System.Net.Sockets.SocketException (98): Address already in use앱이 뜨지 않고 콘솔에 위 메시지가 찍히면, 코드 문제가 아니라 포트 충돌입니다.
2. 포트를 점유한 프로세스 찾기
Windows
netstat -ano | findstr :5000 tasklist /FI "PID eq 12345"Linux / macOS
lsof -i :5000 ss -ltnp | grep 5000출력에서
LISTENING상태인 PID를 확인합니다. 아무것도 안 나오면 그 포트는 비어 있는 것이므로, 앱 쪽 설정을 다시 봐야 합니다.PowerShell에서 한 번에
Get-NetTCPConnection -LocalPort 5000 | Select-Object LocalAddress,State,OwningProcess3. 해결 1: 점유 프로세스 종료
정체를 확인한 뒤 종료합니다. 이전에 띄워 둔 같은 앱인 경우가 대부분입니다.
# Windows taskkill /PID 12345 /F # Linux / macOS kill -9 123454. 해결 2: 포트 변경
그 포트를 반드시 써야 하는 다른 앱이 있다면, 내 앱 쪽 포트를 바꿉니다.
1) launchSettings.json (개발 환경)
{ "profiles": { "MyApp": { "commandName": "Project", "applicationUrl": "https://localhost:5001;http://localhost:5100" } } }2) 실행할 때 직접 지정
dotnet run --urls "http://localhost:5100"3) 코드에서 고정
builder.WebHost.UseUrls("http://localhost:5100");운영에서는
ASPNETCORE_URLS환경 변수나 리버스 프록시(Nginx·IIS) 뒤에서 내부 포트만 맞추는 방식을 주로 씁니다.5. 개발 환경에서 자주 있는 케이스
- 중지했는데 프로세스가 살아 있음 — 작업 관리자에서
MyApp.exe,dotnet.exe확인 dotnet watch를 창 두 개에서 동시에 실행- Docker가
-p 5000:80으로 이미 매핑 중 - IIS Express가 44300~44399 포트를 예약
정리
- 문구 그대로
netstat -ano | findstr :5000으로 PID 확인 - 내 이전 프로세스면 종료, 다른 앱이면 포트 변경
- 코드 문제가 아니므로 롤백·재설치로 시간 쓰지 않기
'Microsoft .NET > ASP.Net & ASP.Net Core' 카테고리의 다른 글
[ASP.NET Core] JWT 토큰 발급·검증 최소 구현 (.NET 8) (0) 2026.11.10 [ASP.NET Core] "No authenticationScheme was specified" 401 오류 원인과 해결 (0) 2026.11.10 [ASP.NET Core] "Cannot consume scoped service from singleton" 오류 해결 (0) 2026.11.10 [ASP.Net Core] (작성중) 리눅스(centOS) Docker 에 ASP.Net Core 배포 (0) 2021.08.18 [ASP.Net Core] 접속자 IP 받기 (0) 2021.07.16