Početna
» Osnovno znanje
»
Kako riješiti grešku “Port 8080 je već u upotrebi” u terminalu na Windowsima, macOSu i Linuxu
Kako riješiti grešku “Port 8080 je već u upotrebi” u terminalu na Windowsima, macOSu i Linuxu
Od rujna 2026., trenutna dokumentacija za Node.js i Docker i dalje opisuje ovu vrstu greške kao standardni sukob pri vezanju adrese; nema provjerene promjene u tim izvorima koja zahtijeva novu metodu rješavanja problema. Praktični uzrok ostaje isti: program pokušava slušati na adresi i portu koje već posjeduje drugi proces. Trenutna dokumentacija za Node.js opisuje povezanu grešku EADDRINUSE kao neuspjelo vezanje jer drugi server zauzima lokalnu adresu, a Docker dokumentira isto stanje kao port is already allocated ili bind: address is already in use. Dokumentacija sustavskih grešaka Node.js-a i Dockerov vodič za rješavanje sukoba portova oba odražavaju ovo ponašanje od rujna 2026.
Praktično rješenje je stoga trajno: pronađite proces koji sluša na TCP portu 8080, identificirajte što je, zaustavite ga samo ako je sigurno zaustaviti ga, ili konfigurirajte svoju novu aplikaciju da koristi drugi port. Nemojte početi ubijanjem nasumičnih PID-ova. Alat za bazu podataka, proxy, Dockerov kontejner, pomoćnik IDE-a, Java usluga ili druga kopija vašeg vlastitog razvojnog servera mogu namjerno koristiti 8080.
Ilustracija generirana AI-em: aplikacija ne uspijeva vezati se jer je port 8080 već zauzet.
Što zapravo znači “port 8080 je već u upotrebi”?
Server obično traži od operativnog sustava da veže utičnicu (socket) na lokalnu adresu poput 127.0.0.1:8080, 0.0.0.0:8080 ili [::]:8080. Ako nekompatibilni slušatelj već drži tu kombinaciju adrese i porta, drugi server ne može je preuzeti. Okviri (frameworks) izlažu grešku operativnog sustava različitim riječima: Node.js obično prijavljuje EADDRINUSE, Python okviri mogu prikazati OSError: [Errno 98] Address already in use, a Docker može prijaviti da je host port već dodijeljen.
To samo po sebi nije dokaz problema s vatrozidom ili pokvarene mrežne veze. Prvo korisno pitanje je: koji proces sluša na 8080?
Provjerite OwningProcess, zatim koristite Get-Process -Id PID
Windows Command Prompt
netstat -ano | findstr :8080
Pročitajte PID u zadnjem stupcu
macOS
lsof -nP -iTCP:8080 -sTCP:LISTEN
Provjerite naredbu i PID prije korištenja kill PID
Linux
ss -ltnp | grep ':8080'
Provjerite proces, ili koristite sudo fuser -v 8080/tcp
Docker
docker ps
Potražite mapiranje hosta poput 0.0.0.0:8080->8080/tcp
Ove su naredbe prvenstveno dijagnostičke. Najsigurniji slijed je: identificiraj → odluči → zaustavi ili prekonfiguriraj → provjeri.
Korak 1: Potvrdite da nešto sluša na portu 8080
Ako vaša aplikacija ispisuje address already in use, EADDRINUSE ili port is already allocated, sukob je obično već jasan. Ako je poruka o grešci manje specifična, upitajte lokalne TCP slušatelje umjesto da pretpostavljate da je 8080 problem.
Na Windowsima, Microsoftova dokumentacija za netstat potvrđuje da -a uključuje portove koji slušaju, -n zadržava adrese i portove numeričkim, a -o dodaje PID vlasnika. U PowerShellu, Microsoftova dokumentacija za Get-NetTCPConnection podržava filtriranje po lokalnom portu i stanju.
Ako to vrati redak, zabilježite njegovu vrijednost OwningProcess. Ako ne vrati ništa, nastavite s donjim odjeljkom “ništa ne čini da posjeduje 8080” prije nego što ubijete bilo što.
Korak 2: Pronađite proces na macOSu
Ilustracija generirana AI-em: lsof identificira proces i PID povezan sa slušateljem na portu 8080.
Na macOSu, lsof je izravan način za identifikaciju procesa koji drži TCP utičnicu koja sluša:
lsof -nP -iTCP:8080 -sTCP:LISTEN
Službeni priručnik za lsof dokumentira -iTCP za TCP Internet utičnice i -sTCP:LISTEN za filtriranje u stanje slušanja. Izlaz obično uključuje naziv naredbe i PID.
Na primjer, ako naredba prijavi PID 12345, nemojte odmah prijeći na kill -9 12345. Prvo utvrdite je li to vaš stari razvojni server, lokalna usluga koju trebate, ili proces kojim upravlja nešto drugo.
Korak 3: Pronađite proces na Windowsima
Ilustracija generirana AI-em: Windows alati koreliraju port koji sluša s PID-om i nazivom procesa.
U Command Promptu ili PowerShellu, ova široko podržana naredba je jednostavna:
netstat -ano | findstr :8080
Potražite redak čija lokalna adresa završava s :8080 i čije je stanje LISTENING. Zadnji stupac je PID. Zatim možete pregledati taj PID u PowerShellu:
Get-Process -Id 12345
Ili koristite Upravitelj zadataka ako preferirate grafičku provjeru. Microsoft izričito napominje da opcija -o prikazuje PID kako biste mogli identificirati aplikaciju. Ova provjera je važna jer isto računalo može imati mnogo nepovezanih Java, Node, Python, kontejnerskih i pozadinskih procesa koji rade istovremeno.
Korak 4: Pronađite slušatelja na Linuxu
Na modernim Linux sustavima, ss je obično najkorisnija naredba za pregled utičnica:
ss -ltnp | grep ':8080'
Priručnik za ss dokumentira -l za utičnice koje slušaju, -t za TCP, -n za numerički izlaz i -p za informacije o procesu. Ovisno o dopuštenjima, detalji o procesu mogu zahtijevati sudo.
Alternativa je:
sudo fuser -v 8080/tcp
Priručnik za fuser dokumentira TCP imenski prostor i napominje da informacije o procesu mogu biti nepotpune kada nemate dopuštenje za pregled deskriptora drugog korisnika.
Korak 5: Trebate li zaustaviti proces ili ga zadržati?
Ovo je točka odluke koja sprječava većinu samonanesenih problema. Ako je PID 12345 napuštena kopija razvojnog servera koji ste namjeravali ponovno pokrenuti, zaustavljanje je razumno. Ako je to lokalni obrnuti proxy, korporativni agent, zajednička integracijska usluga ili kontejner od kojeg ovisi drugi projekt, promjena porta vaše nove aplikacije obično je sigurnija.
Također provjerite pripada li proces nadzorniku (supervisoru). Usluga koju je pokrenuo systemd, Docker Compose, pokretač zadataka IDE-a ili drugi upravitelj procesa može se odmah ponovno pokrenuti nakon što ubijete njegov podproces. U tom slučaju, zaustavite ili prekonfigurirajte nadzornika umjesto da ponovno ubijate PID podprocesa.
Možete li jednostavno koristiti Ctrl+C?
Da – ako je stari server i dalje otvoren u drugom terminalu kojim vi upravljate, vraćanje u taj terminal i pritiskanje Ctrl+C često je najčišće rješenje. To omogućuje serveru da obradi svoj normalni put gašenja umjesto da bude prisilno prekinut izvana.
Korak 6: Sigurno zaustavite sukobljeni proces
Ilustracija generirana AI-em: prvo pošaljite normalni signal za završetak, zatim provjerite da port više ne sluša.
Na macOSu ili Linuxu, počnite s zadanim signalom za završetak:
kill 12345
Linux priručnik za kill navodi da je zadani signal TERM i izričito ga preporučuje umjesto KILL jer proces može obraditi TERM i izvršiti čišćenje. Koristite kill -9 samo kao krajnje sredstvo kada proces za koji ste provjerili da je sigurno zaustaviti ga neće normalno izaći.
U Windows PowerShellu, Microsoft pruža Stop-Process:
Stop-Process -Id 12345 -Confirm
Dokumentacija za Stop-Process podržava zaustavljanje po PID-u i napominje da mogu biti potrebna povišena prava za procese koje ne posjedujete. Opcija -Confirm korisna je kada želite dodatnu provjeru prije završetka.
Ilustracija generirana AI-em: prisilno Windows prekid slijedi još jedna provjera porta. Koristite /F samo nakon što identificirate PID i normalno zaustavljanje nije dovoljno.
Korisnici Command Prompta mogu koristiti:
taskkill /PID 12345
Dodajte /F samo kada normalni završetak nije dovoljan. Microsoftova dokumentacija za taskkill definira /PID za odabir procesa i /F za prisilni završetak.
Korak 7: Provjerite Docker prije nego što okrivite normalni host proces
Docker je čest razlog zašto programeri vide port 8080 zauzetim čak i kada se ne čini da je otvoren nijedan prozor aplikacije. Pokrenite:
docker ps
Potražite u stupcu PORTS mapiranje koje objavljuje host port 8080. Dockerova trenutna dokumentacija za rješavanje problema izričito navodi postojeću aplikaciju ili prethodno pokrenuti kontejner kao uzroke grešaka port already allocated.
Dokumentacija za Docker port naredbu definira ovu naredbu kao način za navođenje mapiranja portova kontejnera. Ako kontejner više nije potreban, zaustavite ga uredno:
docker stop NAZIV_KONTEJNERA
Docker dokumentira da docker stop prvo šalje konfigurirani signal za zaustavljanje, obično SIGTERM, prije nego što prijeđe na prisilno ubijanje nakon razdoblja milosti.
Korak 8: Ponovno pokrenite aplikaciju i provjerite je li 8080 slobodan
Ilustracija generirana AI-em: nakon što je sukobljeni slušatelj uklonjen, razvojni server uspješno se veže na port 8080.
Ponovno pokrenite svoju aplikaciju koristeći svoju normalnu naredbu. Ako sada prijavi uspješno vezanje na 127.0.0.1:8080, sukob je riješen.
Također možete ponovno pokrenuti istu naredbu za pregled koju ste koristili ranije. Prije pokretanja novog servera, upit ne bi trebao pokazati neželjenog slušatelja. Nakon pokretanja, slušatelj bi trebao pripadati procesu koji očekujete.
Ilustracija generirana AI-em: lokalni zahtjev preglednika uspijeva nakon što se aplikacija pokrene na portu 8080.
Što ako proces koji koristi 8080 treba ostati pokrenut?
Nemojte ga ubiti. Dajte svojoj novoj aplikaciji drugi port poput 8081, 3000 ili drugog slobodnog razvojnog porta. Točna sintaksa ovisi o okviru (frameworku).
Za Flask, službena dokumentacija razvojnog servera izričito preporučuje odabir drugog porta kada drugi program posjeduje zadani port:
flask --app app run --port 8081
Za Django 6.1, razvojni server prihvaća port kao argument:
Ilustracija generirana AI-em: prebacivanje na drugi port valjana je alternativa kada port 8080 pripada usluzi koju trebate. Točna zastavica naredbenog retka ovisi o vašem okviru.
Što ako nijedna naredba ne pokazuje proces na portu 8080?
Prođite kroz ove provjere prije nego što pretpostavite da je operativni sustav pogrešan.
Provjerite i IPv4 i IPv6. Usluga može slušati na 0.0.0.0:8080, 127.0.0.1:8080, [::]:8080 ili adresi specifičnog sučelja. Izbjegavajte filtriranje tako usko da propustite stvarnog slušatelja.
Pokrenite pregled s dovoljnim dopuštenjima. Linux alati mogu izostaviti detalje o procesu za utičnice koje posjeduju drugi korisnici. Windowsi također mogu zahtijevati povišene ovlasti za neke operacije s procesima.
Provjerite kontejnere i virtualizirana okruženja. Docker Desktop, WSL, virtualni strojevi i lokalni Kubernetes alati mogu učiniti izvor manje očitim od procesa u prednjem planu terminala.
Potražite petlju automatskog ponovnog pokretanja. Ako se PID odmah promijeni nakon što ga prekinete, vjerojatno nadzornik ponovno pokreće uslugu.
Razlikujte LISTEN od TIME_WAIT. TCP veza u TIME_WAIT nije isto što i proces koji aktivno sluša na 8080. Prvo se fokusirajte na slušatelja i procesa vlasnika.
Potvrdite točnu adresu vezanja. Greška koja spominje samo “8080” može sakriti pokušava li se aplikacija vezati na localhost, sva sučelja, IPv4 ili IPv6.
Zašto port 8080 ponovno postaje zauzet?
Ako se greška vraća nakon svakog ponovnog pokretanja ili prijave, vjerojatno se trajna usluga automatski pokreće. Uobičajeni primjeri uključuju razvojni zadatak pokrenut iz IDE-a, Docker Compose stack, pozadinsku Java uslugu, proxy ili upravitelja usluga OS-a. Umjesto da svako ponavljanje tretirate kao jednokratni problem s PID-om, pronađite komponentu koja pokreće slušatelja i promijenite njegovu konfiguraciju ili ponašanje pri pokretanju.
Ako se sukob događa samo nakon što vi ponovno pokrećete i zaustavljate svoju vlastitu aplikaciju, provjerite je li ranija instanca i dalje pokrenuta u drugom terminalu, pokreće li vaš debugger drugi proces i ima li ponovni učitavač koji prati datoteke roditeljski i podproces. Ključni test ostaje isti: pregledajte slušatelja i provjerite njegov identitet.
Trebate li koristiti kill -9, taskkill /F ili ponovno pokrenuti računalo?
Obično ne kao prvi korak. Normalno gašenje daje procesu priliku da zatvori datoteke, isprazni međuspremnike, zaustavi podzadatke i uredno oslobodi resurse. Prisilni prekid koristan je kada je provjereni proces zaglavljen, ali to bi trebao biti put eskalacije, a ne zadano stanje.
Ponovno pokretanje može očistiti zastarjeli razvojni proces, ali također skriva uzrok. Ako je sukobljena usluga konfigurirana da se automatski pokreće, port može biti ponovno zauzet odmah nakon ponovnog pokretanja. Identificiranje vlasnika 8080 dugoročno je brže.
Pouzdan slijed rješavanja problema
Pročitajte točnu grešku i potvrdite da je riječ o sukobu pri vezanju adrese/porta.
Upitajte port 8080 za proces koji sluša.
Zabilježite PID i identificirajte naziv procesa.
Odlučite treba li taj proces ostati pokrenut.
Ako je to zastarjeli proces, zaustavite ga uredno.
Ako njime upravlja Docker ili drugi nadzornik, zaustavite ili prekonfigurirajte upravitelja.
Ako je proces legitimni, konfigurirajte svoju novu aplikaciju da koristi drugi slobodni port.
Ponovno pokrenite aplikaciju i provjerite posjeduje li očekivani proces sada odabrani port.
Isti tijek rada funkcionira za greške na portovima 3000, 5000, 8000, 8081 i većini drugih lokalnih razvojnih portova. Broj porta se mijenja; dijagnoza ne.