Перейти к содержимому

Как исправить Error: listen EADDRINUSE: address already in use :::3000 и Vite Port 5173 is in use

Error: listen EADDRINUSE: address already in use :::3000

Эта ошибка Node.js означает, что другой процесс уже слушает порт 3000 (::: - это форма IPv6 для «всех адресов»; вы можете также увидеть 127.0.0.1:3000). Часто это копия того же сервера, которую вы запускали раньше и так и не остановили.

Vite обрабатывает ту же ситуацию иначе. По умолчанию он выводит:

Port 5173 is in use, trying another one...

и запускается на следующем свободном порту, так что сервер работает, но не там, где вы ожидаете. С --strictPort (или server.strictPort: true) Vite вместо этого завершается с сообщением Error: Port 5173 is already in use.

  1. Найдите процесс, владеющий портом, и завершите его. В Windows:

    Окно терминала
    netstat -ano | findstr :3000
    taskkill /PID 12345 /F

    Пошаговое описание, в том числе вариант для PowerShell, приведено в разделе Поиск и завершение процесса, занимающего порт.

  2. Или запустите сервер на другом порту, например PORT=3001 для многих серверов Node или --port 5174 для Vite.

Если вы запускаете сервер через Moonpool, задайте port в его записи. Тогда Moonpool:

  • показывает приложение как работающее, пока что-то отвечает на этом порту, поэтому оставшийся сервер, который его занимает, выглядит как работающий, но не «управляемый Moonpool»;
  • при Остановить и Перезапустить завершает всё, что по-прежнему слушает port, если killMode равен port (это значение по умолчанию для приложений web), так что следующий запуск находит порт свободным;
  • помечает два приложения, настроенных на один и тот же port.
apps.json
{
"id": "api",
"name": "API",
"group": "Web apps",
"type": "web",
"cwd": "C:\\code\\api",
"command": "node server.js",
"port": 3000,
"env": { "PORT": "3000" },
"killMode": "port"
}

Moonpool не проверяет порт перед запуском. Если порт всё ещё занят, команда выводит приведённую выше ошибку во вкладке терминала приложения. Нажмите Остановить (это освободит порт) и снова Запустить.

Для Vite передайте --strictPort и держите port равным порту, который вы запрашиваете:

command
npm run dev -- --port 5173 --strictPort

Без этого Vite может перейти на 5174, пока Moonpool продолжает следить за 5173, и индикатор состояния так и не станет сплошным.

killMode со значением port завершает любой процесс на порту, поэтому используйте его только для портов, которые больше никому не нужны. Для приложений Docker в Windows никогда его не используйте. См. Остановка и перезапуск.

Moonpool: бесплатное программное обеспечение от FasterDB