localhost:8080 - Web Server and Application Port Guide
Updated on May 23, 2026
localhost:8080
Alternative HTTP Port for Web Servers
🌐 Open localhost:8080Access your web server or application running on port 8080
Port 8080 is the unprivileged HTTP port most projects pick when port 80 is taken. On Linux and macOS, binding to ports below 1024 needs root (or the CAP_NET_BIND_SERVICE capability on Linux); 8080 is one of the “alternate HTTP” numbers in IANA’s port registry (registered as http-alt) and stays out of root territory. That’s the main reason it caught on.
localhost resolves to 127.0.0.1 on IPv4 or ::1 on IPv6, both pointing at the machine you’re on. So localhost:8080 means “whatever process is listening on TCP port 8080 of this machine.” Apache Tomcat picked 8080 as a default decades ago, Jenkins inherited it, and the broader Java ecosystem locked it in. Plenty of non-Java tools default to 8080 today too - code-server, LocalAI, and Open WebUI are common modern examples.
Services and Software That Use Port 8080
Port 8080 is not tied to a single service by default, so many different applications use it based on their configuration. Here are the main categories:
☕ Java Application Servers
- Apache Tomcat: Java servlet container and web server
- Spring Boot: Java framework with embedded Tomcat server
- JBoss/WildFly: Enterprise Java application server
- Jetty: Lightweight web server and servlet engine
- GlassFish: Java EE application server
🔧 CI/CD & DevOps Tools
- Jenkins: Automation server for continuous integration
- GitLab Runner: CI/CD runner web interfaces
- Nexus Repository: Artifact repository manager
- Artifactory: Universal artifact repository
- TeamCity: JetBrains CI/CD server
🌐 Web Servers & Proxies
- Nginx: Reverse proxy and web server
- Apache HTTP Server: Alternative HTTP port configuration
- HAProxy: Load balancer and proxy server
- Squid: Caching proxy server
- Caddy: Modern web server with automatic HTTPS
🐳 Development & Containers
- code-server: VS Code in the browser; defaults to
127.0.0.1:8080 - Adminer: single-file DB admin UI, commonly served on 8080 via PHP's built-in server
- Docker containers: 8080 is the most-used host-side port in published
composeexamples - Kubernetes services: convention for in-cluster HTTP service ports
- webpack-dev-server: defaults to port 8080 since v4
🤖 AI & Local Apps
- LocalAI: drop-in OpenAI-compatible API for local models, defaults to port 8080
- Open WebUI: browser GUI for Ollama and OpenAI-compatible backends; container listens on 8080 internally (docs map host
3000:8080) - AnythingLLM and other RAG UIs: frequently exposed on 8080 in Docker setups
The Java tools above are what made 8080 famous; the AI/dev tools are why you’ll see it on a fresh machine in 2026. If you’re running more than one of them at once, you’re going to collide. Skip to the troubleshooting section for the conflict-resolution dance.
How to troubleshoot localhost:8080
If you can’t access localhost:8080, here’s how to diagnose and fix common web server issues:
🔍 Step 1: Check if the Service is Running
Action: Confirm that your web server or application is active on port 8080.
How to check:
- Tomcat: Check if Tomcat service is running and accessible
- Jenkins: Verify Jenkins service status and startup logs
- Spring Boot:
mvn spring-boot:runorjava -jar app.jar - Check logs: Look for "Listening on port 8080" or similar messages
🚫 Step 2: Resolve port conflicts
Action: find out what else is on 8080 and either stop it or move your app.
How to fix:
- Find the process:
lsof -iTCP:8080 -sTCP:LISTENon Linux/macOS, ornetstat -ano | findstr :8080on Windows.ss -lptn 'sport = :8080'works on modern Linux withoutlsof. - Stop it gracefully first:
kill <PID>(sends SIGTERM). Only fall back tokill -9 <PID>if the process refuses to exit, since SIGKILL skips cleanup. - Or move your app: 8081 is the conventional next step; 8081-8089 are the usual escape ladder when 8080 is taken.
🔧 Step 3: Confirm the configured port
Action: verify the service actually thinks it's on 8080. Most "it should be running" issues are a config drift somewhere.
Where to look:
- Tomcat: the
Connector port="8080"attribute inconf/server.xml - Spring Boot:
server.portinapplication.properties/application.yml, orSERVER_PORTenv var (which overrides the file) - Jenkins:
--httpPort=8080on the war launcher, orJENKINS_PORTin/etc/default/jenkins/ the systemd unit - code-server:
--bind-addrflag or thebind-addrline in~/.config/code-server/config.yaml
🌐 Step 4: Test the Connection
Action: Verify that the web server is accessible.
How to test:
- Browser: Navigate to
http://localhost:8080 - Command line:
curl http://localhost:8080 - Network access: Use your IP address like
http://192.168.1.100:8080
Access localhost:8080 from Other Devices
If you can not reach localhost:8080 from other devices, it is probably because you are on a different network. Use Pinggy tunnel to easily access it from anywhere:
ssh -p 443 -R0:localhost:8080 free.pinggy.io
This command creates a secure tunnel that forwards traffic from a public URL to your local web server on port 8080, allowing you to:
- Share your Tomcat/Jenkins server with team members or clients
- Test on mobile devices without being on the same network
- Demo your application from anywhere in the world
- Access CI/CD tools remotely for development and testing
The tunnel provides a public URL that you can share, making your localhost:8080 web server accessible from any device with internet access.
Common Problems and Solutions
Here are typical issues with localhost:8080 and how to resolve them:
❌ "Port Already in Use" Error
Problem: Another application is occupying port 8080.
Solution: Find the conflicting process with sudo lsof -i :8080, stop it with sudo kill -9 <PID>, or configure your application to use port 8081.
⚠️ Service Won't Start
Problem: Tomcat, Jenkins, or other service fails to start on port 8080.
Solution: Check service logs for errors, verify configuration files, ensure proper permissions, and check if dependencies are installed.
🔐 Jenkins Initial Setup Issues
Problem: Can't access Jenkins setup wizard or find initial password.
Solution: Navigate to localhost:8080, find initial password in /var/lib/jenkins/secrets/initialAdminPassword, and follow the setup wizard.
🌐 Can't Access from Other Devices
Problem: localhost:8080 only works on the local machine.
Solution: Configure application to bind to 0.0.0.0:8080, allow port 8080 through firewall with sudo ufw allow 8080, and use IP address instead of localhost.
🐳 Docker Container Issues
Problem: Can't access application running in Docker container on port 8080.
Solution: Ensure proper port mapping with docker run -p 8080:8080 myapp and check container logs with docker logs container-name.
Summary
- What it is: TCP port 8080 on the loopback address (
127.0.0.1/::1). Registered with IANA ashttp-alt, the unprivileged alternative to port 80. - Who defaults to it: Tomcat, Spring Boot, Jenkins, code-server, LocalAI, and the Open WebUI container, plus most “alternate HTTP” examples in Docker docs.
- First thing to try when it’s broken:
lsof -iTCP:8080 -sTCP:LISTEN(orss -lptn 'sport = :8080') to see who actually has the port. - First thing to try when something else has it: bump your app to 8081. Spring Boot’s
server.port, Jenkins’s--httpPort, code-server’s--bind-addr, LocalAI’s--portall take it.
🚀 Quick Start Commands
# Tomcat (systemd)
sudo systemctl start tomcat
# Spring Boot
mvn spring-boot:run
# code-server (VS Code in browser)
code-server --bind-addr 0.0.0.0:8080
# LocalAI (default port)
docker run -p 8080:8080 localai/localai:latest
# Quick static file server
python3 -m http.server 8080Use these commands to quickly get started with services on localhost:8080
A small operational note to close on: if multiple services on your machine all want 8080, the conventional escape ladder is 8081 → 8082 → 8083 and so on. If you’re running Tomcat and Jenkins together, expect at least one of them to move. Spring Boot’s server.port property and Jenkins’s --httpPort flag (or JENKINS_PORT env var on systemd) are the two settings you’ll touch most often. For LocalAI and Open WebUI, both honor an explicit --port / PORT env var; setting one to 8081 sidesteps the whole problem.