Разработчикам

Порт уже занят на Mac

Слушать порт TCP на одном адресе может только один процесс. Второй сервер тогда завершается с ошибкой «address already in use».

Применимость: все актуальные версии macOS.Проверено: 29 октября 2026 г.

Симптомы

  • Dev-сервер завершается с ошибкой «EADDRINUSE» или «address already in use».
  • Docker не может опубликовать порт: «port is already allocated».
  • Порт был свободен до сбоя или перезапуска редактора.

Вероятные причины

  • Старая копия вашего сервера. Сервер от прошлого запуска всё ещё работает в фоне.
  • Другое приложение. Тот же порт использует другое приложение. В macOS 12 и новее ресивер AirPlay занимает порты 5000 и 7000.
  • Контейнер. Запущенный контейнер публикует на Mac тот же порт.

Как проверить

  1. Найдите процесс, который слушает порт. Замените 3000 на свой порт.

    lsof -nP -iTCP:3000 -sTCP:LISTEN

    Вывод Процесс указан в столбцах COMMAND и PID.

  2. Чтобы увидеть процессы других пользователей, выполните ту же команду с sudo.

    sudo lsof -nP -iTCP:3000 -sTCP:LISTEN

    Нужен пароль администратора.

  3. Покажите подробности о процессе.

    ps -p 12345 -o pid,command
  4. Поищите контейнеры, которые публикуют этот порт.

    docker ps

Как исправить

  1. Если процесс ваш, остановите его в его окне Терминала клавишами Control-C.

  2. Иначе отправьте ему сигнал завершения. Используйте его PID.

    kill 12345
  3. Если он не останавливается, используйте kill -9. Процесс не сможет сохранить данные.

  4. Если процесс принадлежит macOS, не останавливайте его. Выберите для своего сервера другой порт.

  5. Если это порт 5000 или 7000, прочитайте Порт 5000 или 7000 занят на Mac: ресивер AirPlay.

С Kilobat

  1. Выведите открытые сокеты одного процесса.

    kilobat destinations --pid 12345
  2. Завершите процесс по PID. Добавляйте --force, только если он не останавливается.

    kilobat quit 12345

Вопросы

Почему lsof ничего не показывает, хотя порт занят?

lsof показывает только процессы, которые вам доступны для просмотра. Чтобы увидеть все процессы, запустите его с sudo.

Что делают -n и -P?

Они не дают lsof превращать адреса в имена, а порты — в названия служб. Вывод появляется быстрее и показывает числа.

Источники

Источники проверены 29 октября 2026 г. Man-страницы — те, что установлены вместе с macOS; откройте любую командой man <name> в Терминале.