Як виправити помилку «Port 8080 Is Already in Use» у терміналі на Windows, macOS та Linux

Станом на вересень 2026 року поточна документація Node.js та Docker все ще описує цей клас помилок як стандартний конфлікт прив’язки адреси; жодних підтверджених змін у цих джерелах, які б вимагали нового методу усунення несправностей, немає. Практична причина залишається незмінною: програма намагається прослуховувати адресу та порт, які вже належать іншому процесу. Поточна документація Node.js описує пов’язану помилку EADDRINUSE як невдалу прив’язку, оскільки інший сервер займає локальну адресу, а Docker документує ту саму умову як port is already allocated або bind: address is already in use. Документація системних помилок Node.js та посібник Docker з усунення конфліктів портів відображають цю поведінку станом на вересень 2026 року.

Практичне рішення тому є сталим: знайдіть процес, що прослуховує TCP-порт 8080, визначте, що це за процес, зупиніть його лише якщо це безпечно, або налаштуйте ваш новий додаток на використання іншого порту. Не починайте з вбивства випадкових PID. Інструмент бази даних, проксі, контейнер Docker, допоміжний засіб IDE, служба Java або інша копія вашого власного сервера розробки можуть використовувати 8080 навмисно.

Термінал, що показує помилку 'address already in use' для порту 8080
Ілюстрація, створена ШІ: додаток не може виконати прив’язку, оскільки порт 8080 вже зайнятий.

Що насправді означає «port 8080 is already in use»?

Сервер зазвичай просить операційну систему прив’язати сокет до локальної адреси, такої як 127.0.0.1:8080, 0.0.0.0:8080 або [::]:8080. Якщо несумісний слухач вже утримує цю комбінацію адреси та порту, другий сервер не може її зайняти. Фреймворки представляють збій операційної системи різними формулюваннями: Node.js зазвичай повідомляє про EADDRINUSE, фреймворки Python можуть показувати OSError: [Errno 98] Address already in use, а Docker може повідомляти, що хост-порт вже розподілено.

Це саме по собі не є доказом проблеми з брандмауером або зламаним мережевим з’єднанням. Перше корисне запитання: який процес прослуховує порт 8080?

Швидка відповідь: яку команду слід виконати?

ПлатформаЗнайти слухачаТиповий наступний крок
Windows PowerShellGet-NetTCPConnection -LocalPort 8080 -State ListenПеревірте OwningProcess, потім використайте Get-Process -Id PID
Windows Command Promptnetstat -ano | findstr :8080Прочитайте PID у останньому стовпці
macOSlsof -nP -iTCP:8080 -sTCP:LISTENПеревірте команду та PID перед використанням kill PID
Linuxss -ltnp | grep ':8080'Перевірте процес або використайте sudo fuser -v 8080/tcp
Dockerdocker psШукайте відображення хоста, таке як 0.0.0.0:8080->8080/tcp

Ці команди спочатку є діагностичними. Найбезпечніша послідовність: ідентифікувати → вирішити → зупинити або переналаштувати → перевірити.

Крок 1: Підтвердіть, що щось прослуховує порт 8080

Якщо ваш додаток виводить address already in use, EADDRINUSE або port is already allocated, конфлікт зазвичай вже зрозумілий. Якщо повідомлення про помилку менш конкретне, запитайте локальні TCP-слухачі, замість того щоб припускати, що проблема в 8080.

На Windows документація netstat від Microsoft підтверджує, що -a включає порти, що прослуховуються, -n зберігає адреси та порти в числовому форматі, а -o додає PID власника. У PowerShell документація Get-NetTCPConnection від Microsoft підтримує фільтрацію за локальним портом та станом.

Get-NetTCPConnection -LocalPort 8080 -State Listen

Якщо це повертає рядок, запишіть його значення OwningProcess. Якщо нічого не повертається, перейдіть до розділу «нічого не здається власником 8080» нижче, перш ніж вбивати будь-що.

Крок 2: Знайдіть процес на macOS

Термінал у стилі macOS, що використовує lsof для ідентифікації процесу, що прослуховує порт 8080
Ілюстрація, створена ШІ: lsof ідентифікує процес та PID, пов’язані зі слухачем на порту 8080.

На macOS lsof є прямим способом ідентифікувати процес, що утримує TCP-сокет, що прослуховує:

lsof -nP -iTCP:8080 -sTCP:LISTEN

Офіційний посібник lsof документує -iTCP для TCP-інтернет-сокетів та -sTCP:LISTEN для фільтрації за станом прослуховування. Вивід зазвичай включає назву команди та PID.

Наприклад, якщо команда повідомляє PID 12345, не поспішайте одразу виконувати kill -9 12345. Спершу визначте, чи це ваш старий сервер розробки, локальна служба, яка вам потрібна, чи процес, керований чимось іншим.

Крок 3: Знайдіть процес на Windows

Windows PowerShell, що використовує netstat та tasklist для ідентифікації PID 12345 на порту 8080
Ілюстрація, створена ШІ: інструменти Windows корелюють порт, що прослуховується, з PID та назвою процесу.

У Command Prompt або PowerShell ця широко підтримувана команда є простою:

netstat -ano | findstr :8080

Шукайте рядок, локальна адреса якого закінчується на :8080, а стан — LISTENING. Останній стовпець — це PID. Потім ви можете перевірити цей PID у PowerShell:

Get-Process -Id 12345

Або використайте Диспетчер завдань, якщо вам подобається графічна перевірка. Microsoft явно зазначає, що опція -o відображає PID, щоб ви могли ідентифікувати додаток. Ця перевірка важлива, оскільки на тій самій машині одночасно може працювати багато не пов’язаних процесів Java, Node, Python, контейнерів та фонових служб.

Крок 4: Знайдіть слухача на Linux

На сучасних системах Linux ss зазвичай є найбільш корисною командою для інспектування сокетів:

ss -ltnp | grep ':8080'

Сторінка посібника ss документує -l для сокетів, що прослуховують, -t для TCP, -n для числового виводу та -p для інформації про процес. Залежно від дозволів, деталі процесу можуть вимагати sudo.

Альтернативою є:

sudo fuser -v 8080/tcp

Сторінка посібника fuser документує простір імен TCP і зазначає, що інформація про процес може бути неповною, якщо у вас немає дозволу на інспектування дескрипторів іншого користувача.

Крок 5: Чи слід зупиняти процес, чи залишати його?

Це точка прийняття рішення, яка запобігає більшості проблем, створених власними руками. Якщо PID 12345 — це покинутий копія сервера розробки, який ви мали намір перезапустити, його зупинка є розумною. Якщо це локальний зворотний проксі, корпоративний агент, спільна інтеграційна служба або контейнер, від якого залежить інший проєкт, зміна порту вашого нового додатка зазвичай є безпечнішою.

Також перевірте, чи належить процес супервізору. Служба, запущена systemd, Docker Compose, інструментом запуску завдань IDE або іншим менеджером процесів, може миттєво перезапуститися після того, як ви вб’єте її дочірній процес. У такому випадку зупиніть або переналаштуйте супервізор, замість того щоб повторно вбивати дочірній PID.

Чи можна просто використати Ctrl+C?

Так — якщо старий сервер все ще відкритий в іншому терміналі, яким ви керуєте, повернення до цього терміналу та натискання Ctrl+C часто є найчистішим рішенням. Це дозволяє серверу обробити свій звичайний шлях завершення роботи, замість того щоб бути примусово завершеним ззовні.

Крок 6: Безпечно зупиніть конфліктний процес

Термінал, що використовує kill для PID 12345, а потім повторно перевіряє порт 8080
Ілюстрація, створена ШІ: спочатку надішліть звичайний сигнал завершення, потім переконайтеся, що порт більше не прослуховується.

На macOS або Linux почніть зі стандартного сигналу завершення:

kill 12345

Посібник Linux kill стверджує, що за замовчуванням використовується TERM, і спеціально рекомендує його замість KILL, оскільки процес може обробити TERM і виконати очищення. Використовуйте kill -9 лише як останній засіб, коли процес, який ви перевірили як безпечний для завершення, не виходить нормально.

У Windows PowerShell Microsoft надає Stop-Process:

Stop-Process -Id 12345 -Confirm

Документація Stop-Process підтримує зупинку за PID і зазначає, що для процесів, якими ви не володієте, можуть знадобитися підвищені привілеї. Опція -Confirm корисна, коли вам потрібна додаткова перевірка перед завершенням.

PowerShell адміністратора, що завершує процес за PID та повторно перевіряє порт 8080
Ілюстрація, створена ШІ: примусове завершення роботи Windows, за яким слідує повторна перевірка порту. Використовуйте /F лише після того, як ви ідентифікували PID і звичайна зупинка недостатня.

Користувачі Command Prompt можуть використати:

taskkill /PID 12345

Додайте /F лише тоді, коли звичайного завершення недостатньо. Документація taskkill від Microsoft визначає /PID для вибору процесу та /F для примусового завершення.

Крок 7: Перевірте Docker, перш ніж звинувачувати звичайний процес хоста

Docker є поширеною причиною того, що розробники бачать зайнятий порт 8080, навіть коли жодне вікно додатка не здається відкритим. Виконайте:

docker ps

Шукайте у стовпці PORTS відображення, яке публікує хост-порт 8080. Поточна документація Docker з усунення несправностей явно перелічує існуючий додаток або раніше запущений контейнер як причини помилок port already allocated.

Ви можете перевірити відображення конкретного контейнера за допомогою:

docker port CONTAINER_NAME

Документація команди Docker port визначає цю команду як спосіб перелічити відображення портів контейнера. Якщо контейнер більше не потрібен, зупиніть його чисто:

docker stop CONTAINER_NAME

Docker документує, що docker stop спочатку надсилає налаштований сигнал зупинки, зазвичай SIGTERM, перш ніж перейти до примусового вбивства після періоду очікування.

Крок 8: Перезапустіть додаток і переконайтеся, що 8080 вільний

Термінал, що показує успішний запуск додатка розробки на 127.0.0.1 порт 8080
Ілюстрація, створена ШІ: після видалення конфліктного слухача сервер розробки успішно прив’язується до порту 8080.

Запустіть ваш додаток знову, використовуючи його звичайну команду. Якщо тепер він повідомляє про успішну прив’язку до 127.0.0.1:8080, конфлікт вирішено.

Ви також можете повторно виконати ту саму команду інспектування, яку використовували раніше. Перед запуском нового сервера запит не повинен показувати небажаних слухачів. Після запуску слухач повинен належати очікуваному процесу.

Браузер, що показує успішну відповідь локального додатка на 127.0.0.1 порт 8080
Ілюстрація, створена ШІ: локальний запит браузера успішний після запуску додатка на порту 8080.

Що робити, якщо процес, що використовує 8080, повинен залишатися запущеним?

Не вбивайте його. Надайте вашому новому додатку інший порт, такий як 8081, 3000 або інший вільний порт розробки. Точний синтаксис залежить від фреймворку.

Для Flask офіційна документація сервера розробки явно рекомендує обирати інший порт, коли інша програма володіє портом за замовчуванням:

flask --app app run --port 8081

Для Django 6.1 сервер розробки приймає порт як аргумент:

python manage.py runserver 8081

Поточний навчальний посібник Django та довідка runserver документують запуск паралельних серверів розробки на окремих портах.

Для Spring Boot стандартною властивістю є server.port. Документація конфігурації Spring Boot показує server.port як налаштування порту сервера.

Ілюстрація терміналу перезапуску сервера розробки на іншому порту
Ілюстрація, створена ШІ: перехід на інший порт є дійсною альтернативою, коли порт 8080 належить службі, яка вам потрібна. Точний прапорець командного рядка залежить від вашого фреймворку.

Що робити, якщо жодна команда не показує процес на порту 8080?

Пройдіться через ці перевірки, перш ніж припускати, що операційна система помиляється.

  • Перевірте як IPv4, так і IPv6. Служба може прослуховувати 0.0.0.0:8080, 127.0.0.1:8080, [::]:8080 або адресу конкретного інтерфейсу. Уникайте занадто вузької фільтрації, щоб не пропустити фактичного слухача.
  • Виконуйте інспектування з достатніми правами. Інструменти Linux можуть пропускати деталі процесу для сокетів, що належать іншим користувачам. Windows також може вимагати підвищення прав для деяких операцій з процесами.
  • Перевірте контейнери та віртуалізовані середовища. Docker Desktop, WSL, віртуальні машини та локальні інструменти Kubernetes можуть зробити джерело менш очевидним, ніж процес у терміналі на передньому плані.
  • Шукайте цикл автоматичного перезапуску. Якщо PID змінюється миттєво після того, як ви його завершили, супервізор, ймовірно, перезапускає службу.
  • Розрізняйте LISTEN та TIME_WAIT. TCP-з’єднання у стані TIME_WAIT — це не те саме, що процес, який активно прослуховує 8080. Спершу зосередьтеся на слухачі та процесі-власнику.
  • Підтвердіть точну адресу прив’язки. Помилка, що згадує лише «8080», може приховувати, чи намагається додаток прив’язатися до localhost, усіх інтерфейсів, IPv4 чи IPv6.

Чому порт 8080 знову стає зайнятим?

Якщо помилка повертається після кожного перезавантаження або входу в систему, ймовірно, постійна служба запускається автоматично. Поширені приклади включають завдання розробки, запущене IDE, стек Docker Compose, фонову службу Java, проксі або менеджер служб ОС. Замість того, щоб розглядати кожне повторення як одноразову проблему з PID, знайдіть компонент, який запускає слухача, і змініть його конфігурацію або поведінку запуску.

Якщо конфлікт виникає лише після того, як ви повторно запускаєте та зупиняєте свій власний додаток, перевірте, чи не працює попередній екземпляр в іншому терміналі, чи не запускає ваш відлагоджувач другий процес і чи не має релодер, що стежить за файлами, батьківського та дочірнього процесів. Ключовий тест залишається тим самим: інспектувати слухача та перевірити його ідентичність.

Чи слід використовувати kill -9, taskkill /F або перезавантажувати комп’ютер?

Зазвичай ні як перший крок. Звичайне завершення роботи дає процесу шанс закрити файли, скинути буфери, зупинити дочірні завдання та чисто звільнити ресурси. Примусове завершення корисне, коли перевірений процес завис, але воно повинно бути шляхом ескалації, а не дією за замовчуванням.

Перезавантаження може очистити застарілий процес розробки, але воно також приховує причину. Якщо конфліктна служба налаштована на автоматичний запуск, порт може бути знову зайнятий одразу після перезавантаження. Ідентифікація власника 8080 є швидшою в довгостроковій перспективі.

Надійна послідовність усунення несправностей

  1. Прочитайте точну помилку та підтвердіть, що це конфлікт прив’язки адреси/порту.
  2. Запитайте порт 8080 щодо процесу, що прослуховує.
  3. Запишіть PID та ідентифікуйте назву процесу.
  4. Вирішіть, чи цей процес повинен залишатися запущеним.
  5. Якщо це застарілий процес, зупиніть його м’яко.
  6. Якщо ним керує Docker або інший супервізор, зупиніть або переналаштуйте менеджер.
  7. Якщо процес є легітимним, налаштуйте ваш новий додаток на використання іншого вільного порту.
  8. Перезапустіть додаток і переконайтеся, що очікуваний процес тепер володіє обраним портом.

Той самий робочий процес працює для помилок на портах 3000, 5000, 8000, 8081 та більшості інших локальних портів розробки. Номер порту змінюється; діагностика — ні.

Основні посилання

Залишити коментар

Як виправити помилку “Prisma Client Has Not Been Generated Yet”

Як виправити помилку “Prisma Client Has Not Been Generated Yet”

Виправте помилку незгенерованого Prisma Client, перевіривши генератор, схему, шлях виводу, імпорти, версії, налаштування монорепозиторію та кроки збірки під час розгортання.

Як виправити помилку SSL-сертифіката: не вдалося отримати локальний сертифікат емітента в Git

Як виправити помилку SSL-сертифіката: не вдалося отримати локальний сертифікат емітента в Git

Виправте помилку Git «не вдалося отримати локальний сертифікат емітента», визначивши механізм довіри, встановивши правильний ланцюжок ЦС та зберігаючи перевірку SSL увімкненою.

Як виправити помилку таймауту мережі MongoDB у з'єднанні Mongoose

Як виправити помилку таймауту мережі MongoDB у з'єднанні Mongoose

Виправте помилки таймауту мережі MongoDB у Mongoose, визначивши тип таймауту, перевіривши доступність Atlas або TCP, виправивши URI та налаштувавши таймаути лише за необхідності.

Як виправити помилку «Execution Policy Restricted» у Windows PowerShell

Як виправити помилку «Execution Policy Restricted» у Windows PowerShell

Виправте помилку обмеженої політики виконання PowerShell, перевіривши область дії та групову політику, а потім обравши RemoteSigned, Unblock-File або тимчасовий параметр сесії.

Як виправити помилку npm ERR! code ERESOLVE: конфлікт залежностей-партнерів

Як виправити помилку npm ERR! code ERESOLVE: конфлікт залежностей-партнерів

Виправте конфлікти залежностей-партнерів npm ERESOLVE, визначивши несумісний діапазон пакетів, узгодивши версії, використовуючи npm explain та npm ls, а також розглядаючи legacy-peer-deps або force лише як контрольовані резервні варіанти.

Як виправити помилку підключення Redis до 127.0.0.1:6379

Як виправити помилку підключення Redis до 127.0.0.1:6379

Виправте помилки відмови у підключенні Redis на 127.0.0.1:6379, перевіривши сервер, порт, мережу Docker, redis.conf, автентифікацію та TLS.

Як виправити внутрішню помилку 500 у серверних компонентах Next.js

Як виправити внутрішню помилку 500 у серверних компонентах Next.js

Виправте помилки 500 у серверних компонентах Next.js, аналізуючи логи сервера, перевіряючи запити даних та змінні середовища, обробляючи помилки та перевіряючи збірку для продакшену.

Як виправити помилку CrashLoopBackOff у Kubernetes у локальному Minikube

Як виправити помилку CrashLoopBackOff у Kubernetes у локальному Minikube

Діагностуйте та виправляйте помилку CrashLoopBackOff у Kubernetes у локальному Minikube, перевіряючи стан пода, попередні логи, причини завершення роботи, проби, конфігурацію, ліміти пам’яті та стан кластера.

Як виправити помилку «Docker Desktop Engine Stopped» у Windows 11

Як виправити помилку «Docker Desktop Engine Stopped» у Windows 11

Виправте помилку «Docker Desktop Engine Stopped» у Windows 11, перевіривши статус Docker, оновивши та перезавантаживши WSL 2, підтвердивши віртуалізацію та використавши діагностику перед скиданням налаштувань.

Як виправити помилку Uncaught ReferenceError: process is not defined у Vite

Як виправити помилку Uncaught ReferenceError: process is not defined у Vite

Виправте помилку 'process is not defined' у Vite, замінивши використання process.env у стилі Node.js, правильно налаштувавши змінні VITE_ та перевіривши залежності.