Гайды

Порт занят (port already in use) — почему и как быстро починить

Иллюстрация: дверь с номером 3000 уже занята фигурой изнутри, снаружи ждёт вторая

Запускаешь проект — а вместо сайта красное: Error: listen EADDRINUSE: address already in use :::3000 или просто «port already in use». Перевод: дверь 3000 уже кем-то занята, второй жилец туда не влезет. И почти всегда виноват не баг в коде, а забытый процесс. Разберём три причины — от самой частой к редкой.

Если само слово «порт» звучит туманно — сначала загляни в что такое порт, дальше будет понятнее.

Причина 1. Старый процесс не закрылся (99% случаев)

Ты уже запускал проект, закрыл вкладку терминала или нажал не то — а сервер остался жить в фоне и держит порт. Новый запуск стучится в ту же дверь и получает «занято».

Как проверить: спроси у системы, кто сидит на порту.

  • macOS/Linux: lsof -i :3000 — покажет процесс и его номер (PID).
  • Windows: netstat -ano | findstr :3000 — PID в последней колонке.

Как починить: выгони этот процесс по его PID.

  • macOS/Linux: kill -9 12345 (подставь свой PID вместо 12345).
  • Windows: taskkill /PID 12345 /F.

Порт свободен — запускай заново. Это лечит подавляющее большинство случаев.

Причина 2. Порт реально занят другим приложением

Иногда на «твоём» порту сидит совсем другая программа — другой проект, Docker-контейнер, какой-нибудь фоновый сервис. Особенно легко попасть на ходовых номерах вроде 8080.

Как проверить: тот же lsof -i :3000 или netstat, но в имени процесса ты увидишь не свой проект, а что-то чужое.

Как починить — два пути:

  • Закрой ту программу, если она сейчас не нужна.
  • Или смени порт своему проекту — часто это одна строчка в настройках или переменная окружения (PORT=3001). Запустишь на соседней двери — конфликта нет. Это самый безболезненный вариант, если непонятно, что за сосед.

Причина 3. Двойной запуск или зависший терминал

Бывает проще некуда: ты запустил проект дважды — во второй вкладке терминала или второй раз нажав «Run» в редакторе. Первый экземпляр занял порт, второй ругается.

Как проверить: глянь на открытые вкладки терминала и процессы редактора — нет ли уже работающего сервера.

Как починить: закрой лишний запуск — в его вкладке нажми Ctrl+C. Если вкладка потерялась, вернись к способу из причины 1 и убей процесс по PID.

Как узнать, какой процесс держит порт?

Командой, которая спрашивает у системы «кто на этом порту». macOS/Linux: lsof -i :3000. Windows: netstat -ano | findstr :3000. В ответе — имя процесса и его PID (числовой идентификатор). PID нужен, чтобы прицельно закрыть именно этот процесс, не задев остальные.

Безопасно ли просто сменить порт?

Да, абсолютно. Порт — это всего лишь номер двери, приложению без разницы, на какой висеть. Смена 3000 на 3001 ничего не ломает — поменяется только адрес, по которому открываешь: localhost:3001. Это законный и часто самый быстрый выход, когда возиться с чужим процессом не хочется. Если после этого сайт всё равно не открывается — причина другая, загляни в почему localhost не отвечает.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →