ByteScope

8080

Port 8080 · HTTP alternate

TCPIANA assignedWeb & HTTP

The port a dev server, a Tomcat instance or a proxy grabs when 80 is taken — and the one that is already taken when you need it.

Find what is using port 8080

Run the line for your platform. Each one names the process holding the port and the address it bound to, which is usually the whole answer.

Check it from outside the machine

`nmap -Pn -p 8080 example.com` answers whether anything is reachable there from outside the machine. `open` means the TCP handshake completed, `closed` means the host sent a reset so it is up with nothing listening, and `filtered` means the probe vanished — a firewall dropped it. Add `--reason` to see which of those actually happened, and `-sV` to have nmap fetch a response and report the server banner, which is how you find out that the thing on 8080 is a Tomcat you forgot about. Only scan hosts you are responsible for.

Why a connection to 8080 fails

What you seeWhat it means
Error: listen EADDRINUSE: address already in use :::8080Another process already holds the port. The `:::8080` form is the IPv6 wildcard, which on most systems also covers IPv4, so a server bound there blocks both. Find the owner with the probe for your platform; nine times out of ten it is an earlier run of the same server that was detached from the terminal rather than stopped.
Only one usage of each socket address (protocol/network address/port) is normally permittedThe Windows wording of the same thing, error 10048. If `netstat` shows no listener, the port is reserved rather than occupied: check the excluded ranges with the `netsh` command above before hunting for a process that does not exist.
The server says it started, but another device on the same network gets connection refusedIt bound to `127.0.0.1` instead of `0.0.0.0`. Many frameworks changed to a loopback default deliberately, so this is a configuration flag rather than a bug — `--host 0.0.0.0`, `HOST=0.0.0.0`, or the equivalent. Confirm with the probes: the address column tells you which one it chose.
The port frees itself about a minute after the server exitsSockets that were closed while a connection was still open sit in `TIME_WAIT` for up to two minutes, and a new bind is refused until then unless the program sets `SO_REUSEADDR`. Waiting works; so does starting the new server on a different port. Nothing needs killing.
8080 answers, but with something you did not startUsually a container that is still publishing the port — `docker ps` will show `0.0.0.0:8080->8080/tcp` on the offender. It can also be an installed service such as Tomcat or a printer admin interface that starts at boot. `nmap -sV` against your own machine reads the banner and names it.

What runs on port 8080

IANA registers 8080 as `http-alt`, "HTTP Alternate", for both TCP and UDP, so the number is assigned even though what actually runs there is convention rather than a protocol. The reason it became the default for so much software is mundane: on Unix systems ports below 1024 are privileged, so binding port 80 needs root or a granted capability, while 8080 needs neither. That makes it the natural home for anything a developer starts by hand — Tomcat's default connector, Jenkins, Spring Boot, a Vite or webpack proxy, Docker's published port for a web container, and the origin behind a reverse proxy that terminates TLS on 443. The number implies plain HTTP and nothing else: it is not encrypted, it carries no special meaning to a browser, and `http://host:8080/` is simply an ordinary HTTP request to an unusual port. Because it is shared by so much software, an occupied 8080 is far more often another one of your own processes than anything mysterious — the probes below name it in one line.

Should port 8080 face the internet?

Moving a service from 80 to 8080 buys no security whatsoever. Internet-wide scanners sweep 8080 as routinely as 80, and a service there is discovered in the same hours. What makes 8080 riskier in practice is what tends to live on it: admin consoles and dev servers that were never meant to face outward — Tomcat's manager application, a Jenkins instance with a fresh setup wizard, a Spring Boot actuator endpoint, a container's debug UI. Bind development servers to `127.0.0.1` so they cannot leave the machine, and expose anything real through a reverse proxy on 443 that terminates TLS, rather than opening 8080 at the firewall. If it must be reachable, restrict it by source address and put authentication in front of it; treat it as plaintext, because it is.

Service
HTTP alternate
Transport
TCP
Registry
IANA assigned
Category
Web & HTTP

Tools on this site

All of these run in your browser — nothing is uploaded.

Related ports

Ports people usually end up checking in the same session as 8080.

Frequently asked questions

Why does the command show nothing when the port is clearly in use?

Almost always permissions. lsof and ss list the socket but hide the owning process when it belongs to another user, so a server started by a system account, by a container runtime or by launchd shows up as an anonymous listener until you re-run the command with sudo. On Windows the opposite happens: netstat shows nothing at all, yet a bind still fails, which means the port sits inside a range that Hyper-V, WSL2 or Docker Desktop reserved at boot.

Is it safe to kill whatever is holding the port?

Look at what it is first. An orphaned dev server is safe to kill; a database with a write in flight is not, and neither is a system service that something else depends on. If the owner is a container, stop the container instead — killing the process the host sees only makes the runtime restart it. When the process is something you need, moving your own service to another port is the faster fix.

Why can I reach the port locally but not from another machine?

The listener bound to 127.0.0.1 rather than 0.0.0.0. The probes on every page print the bound address next to the process for exactly this reason: a loopback bind is reachable from the machine itself and from nowhere else, no matter how the firewall is configured. Many frameworks made that the default deliberately, so it is usually a flag rather than a bug. If the address is already 0.0.0.0 and it still fails, the next suspect is a host firewall or a cloud security group.

Does moving a service to an unusual port make it safer?

Barely. Internet-wide scanners sweep the whole port range continuously, so an unusual number buys hours, not safety, and it costs you every colleague who now has to remember it. It does cut the noise in your logs from opportunistic scans of the default port, which is a real if modest benefit. Authentication, a firewall that restricts source addresses, and not exposing the service at all are the measures that actually change the outcome.

Still stuck on port 8080? browse every port in the reference — or go back to the failure message you actually got, above.