Port Lookup
What usually runs on port 5432, 6443 or 9090 — and what to check if it’s open.
● Runs 100% in your browser — nothing you type leaves this page.
93 ports and ranges
- FTPtcpNever expose
File transfer: 21 for commands, 20 for data in active mode.
Passwords and files travel in clear text. Use SFTP (over SSH) instead.
- SSHtcpCan face the internet
Remote shell, SFTP, scp, rsync over SSH, git over SSH.
Fine to expose with keys only (PasswordAuthentication no). Expect constant login attempts in the logs.
Related: SSH "Permission denied (publickey)": how to find the real cause · SSH "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!": check it, then fix known_hosts · Ansible "UNREACHABLE! Failed to connect to the host via ssh": find the real SSH error
- TelnettcpNever expose
Old remote shell, still found on network gear.
Everything, passwords included, is sent in clear text. Use SSH.
- SMTPtcpCan face the internet
Mail between mail servers.
Only on a mail server. Many cloud providers block outgoing port 25 by default. Never run an open relay.
- DNStcp/udpKeep it internal
Name resolution. UDP for most queries, TCP for large answers and zone transfers.
Public only for authoritative DNS servers. An open resolver is abused for DDoS amplification.
Related: "Temporary failure in name resolution": fix DNS on a Linux server
- DHCPudpKeep it internal
67 for the server, 68 for the client.
- TFTPudpNever expose
Trivial file transfer, used for PXE boot and network devices.
No authentication at all.
- HTTPtcpCan face the internet
Web servers: nginx, Apache, Caddy, load balancers.
Usually only to redirect to HTTPS and for Let’s Encrypt HTTP-01 challenges.
Related: "Address already in use": find who is using port 80 (or any port) · Nginx "502 Bad Gateway": find the cause in the error log · Nginx "413 Request Entity Too Large": raise the upload limit in the right place · Nginx "504 Gateway Time-out": find out what's slow before raising the timeout · Certbot "failed to authenticate some domains": read the Type, then fix DNS, port 80 or the path · Nginx "403 Forbidden": read the error log, then fix the index, permissions or SELinux
- Kerberostcp/udpKeep it internal
Authentication in Active Directory and FreeIPA.
- POP3tcpNever expose
Mail download, unencrypted.
Use POP3S on 995.
- rpcbindtcp/udpNever expose
Maps RPC services to ports; needed by NFSv3.
Abused for DDoS amplification and gives away which services run.
- NTPudpKeep it internal
Time sync (ntpd, chrony).
Clients only need outgoing 123. A public NTP server must not answer monlist queries.
- MS RPCtcpNever expose
Windows RPC endpoint mapper (WMI, DCOM, AD).
Related: Windows "The RPC server is unavailable" (0x800706BA): how to find what blocks it
- NetBIOStcp/udpNever expose
Old Windows name service and file sharing.
- IMAPtcpKeep it internal
Mail access, unencrypted or with STARTTLS.
Prefer IMAPS on 993.
- SNMPudpNever expose
Monitoring network devices: 161 for queries, 162 for traps.
v1/v2c send the community string in clear text, and "public" is still a common default.
- BGPtcpKeep it internal
Routing between networks; also Calico and MetalLB in Kubernetes.
- LDAPtcp/udpKeep it internal
Directory: Active Directory, OpenLDAP, FreeIPA.
Prefer LDAPS on 636 or StartTLS — simple binds send the password in clear text.
- HTTPStcp/udpCan face the internet
Web over TLS. UDP 443 is HTTP/3 (QUIC).
Related: "Address already in use": find who is using port 80 (or any port) · "SSL certificate problem: unable to get local issuer certificate": fix the chain, not the check
- SMBtcpNever expose
Windows file sharing and Samba.
Never to the internet: it is how WannaCry and many other worms spread.
Related: Windows "System error 53" and "System error 5" with net use: the network path, and access denied
- SMTPStcpCan face the internet
Mail submission from clients over TLS.
- IKEudpCan face the internet
IPsec VPN key exchange (with 4500/udp for NAT traversal).
- syslogudpKeep it internal
Remote logging (rsyslog, syslog-ng).
No encryption or authentication; use 6514 (TLS) across untrusted networks.
- SubmissiontcpCan face the internet
Mail submission from clients, with STARTTLS and login.
- LDAPStcpKeep it internal
LDAP over TLS.
- rsync daemontcpKeep it internal
rsync in daemon mode (rsync://). rsync over SSH uses 22.
- FTPStcpKeep it internal
FTP over TLS (implicit).
- IMAPStcpCan face the internet
IMAP over TLS.
- POP3StcpCan face the internet
POP3 over TLS.
- SOCKStcpNever expose
SOCKS proxy, e.g. ssh -D 1080.
An open proxy is quickly abused.
- OpenVPNudpCan face the internet
OpenVPN default (UDP, or TCP if configured).
- SQL ServertcpKeep it internal
Microsoft SQL Server default instance.
Constantly brute-forced when exposed. 1434/udp is the SQL Browser for named instances.
Related: SQL Server "A network-related or instance-specific error" (error 40, error 26): how to fix it · SQL Server "Login failed for user" (error 18456): the state tells you why
- OracletcpKeep it internal
Oracle Database listener.
Related: Oracle "ORA-12154: TNS:could not resolve the connect identifier specified": how to fix it · Oracle "ORA-12541: no listener": start it, or connect to the address it really uses · Oracle "ORA-12514: listener does not currently know of service": check the name, then the registration
- RADIUSudpKeep it internal
Network login (Wi-Fi, VPN): 1812 authentication, 1813 accounting.
- MQTTtcpKeep it internal
IoT messaging (Mosquitto), unencrypted. 8883 is MQTT over TLS.
- NFStcp/udpKeep it internal
Network file system.
- ZooKeepertcpKeep it internal
ZooKeeper clients (Kafka before KRaft, Hadoop, Solr).
- Docker APItcpNever expose
Docker daemon over TCP without TLS.
Anyone who reaches it can start a privileged container — that is root on the host. Use the local socket, SSH (DOCKER_HOST=ssh://…) or 2376 with TLS client certificates.
Related: Docker: "permission denied while trying to connect to the Docker daemon socket" · "Cannot connect to the Docker daemon. Is the docker daemon running?": every cause
- Docker API (TLS)tcpKeep it internal
Docker daemon over TCP with TLS.
Only with client certificates (tlsverify); otherwise it is as dangerous as 2375.
- Docker SwarmtcpKeep it internal
Swarm cluster management. Nodes also need 7946/tcp+udp and 4789/udp.
- etcdtcpNever expose
etcd: 2379 for clients (the Kubernetes API server), 2380 between etcd members.
etcd holds every Kubernetes Secret; only the control plane should reach it.
- GrafanatcpKeep it internal
Grafana web UI; also the default for many Node.js dev servers.
Put it behind a reverse proxy with HTTPS, and change the admin/admin login.
- LokitcpKeep it internal
Grafana Loki HTTP API (log ingestion and queries).
- SquidtcpKeep it internal
Squid HTTP proxy.
- iSCSItcpNever expose
Block storage over the network.
- MySQL / MariaDBtcpKeep it internal
MySQL and MariaDB server.
Bind to 127.0.0.1 or a private address; if apps elsewhere need it, allow only their IPs.
Related: MySQL "Can't connect to local MySQL server through socket": find out why (ERROR 2002) · MySQL ERROR 1045 (28000): Access denied for user — find which part is wrong · MySQL "ERROR 1040: Too many connections": get in, find who holds them, fix it · MySQL "ERROR 2003: Can't connect to MySQL server": read the number in brackets · MySQL "ERROR 1130: Host is not allowed to connect": an account is a user and a host
- RDPtcp/udpNever expose
Windows Remote Desktop.
One of the most attacked ports on the internet. Reach it through a VPN or a gateway instead.
Related: RDP "An authentication error has occurred": CredSSP encryption oracle and other causes
- OpenTelemetrytcpKeep it internal
OTLP: 4317 for gRPC, 4318 for HTTP (traces, metrics, logs).
- epmdtcpKeep it internal
Erlang port mapper, used by RabbitMQ and CouchDB clusters.
- IPsec NAT-TudpCan face the internet
IPsec VPN traffic through NAT (with 500/udp).
- VXLANudpKeep it internal
Overlay networks: Docker Swarm, Flannel, Calico (VXLAN mode).
- Docker RegistrytcpKeep it internal
Self-hosted registry (registry:2); also Flask’s dev server and AirPlay on macOS.
Has no login by default — anyone who reaches it can pull and push images.
- Logstash BeatstcpKeep it internal
Logstash input for Filebeat and other Beats.
- SIPtcp/udpKeep it internal
VoIP signaling: 5060 plain, 5061 over TLS.
Exposed SIP servers are constantly scanned for toll fraud.
- mDNSudpNever expose
Local name discovery (Avahi, Bonjour, .local names).
- PostgreSQLtcpKeep it internal
PostgreSQL server.
listen_addresses and pg_hba.conf decide who can connect; keep it off the internet.
Related: PostgreSQL "Connection refused … Is the server running?": find out why nothing answers on 5432 · PostgreSQL "FATAL: password authentication failed for user": find the real reason · PostgreSQL "FATAL: sorry, too many clients already": find who holds the connections · PostgreSQL "Peer authentication failed for user": connect the right way, or change pg_hba.conf · PostgreSQL "no pg_hba.conf entry for host": allow this connection, the safe way
- KibanatcpKeep it internal
Kibana web UI.
- NRPEtcpKeep it internal
Nagios remote plugin executor.
- RabbitMQtcpKeep it internal
AMQP clients. The management UI is on 15672, AMQP over TLS on 5671.
- VNCtcpNever expose
Remote desktop (display :0; :1 is 5901…).
Weak or no passwords are common. Tunnel it over SSH: ssh -L 5900:localhost:5900 host.
- WinRMtcpKeep it internal
Windows remote management (PowerShell remoting, Ansible): 5985 HTTP, 5986 HTTPS.
- RedistcpNever expose
Redis server.
Anyone who can connect without a password controls the server, and exposed instances are routinely hijacked. Bind to 127.0.0.1 or a private address, with a password (requirepass or ACLs).
Related: Redis "MISCONF Redis is configured to save RDB snapshots": why writes stopped · Redis "NOAUTH Authentication required": send the password, the right way for your client · Redis "OOM command not allowed when used memory > maxmemory": choose what to do when full
- Kubernetes APItcpKeep it internal
kube-apiserver — what kubectl talks to.
Restrict it to the IPs that run kubectl and your CI. It has authentication, but every exposed version bug matters.
Related: kubectl "The connection to the server localhost:8080 was refused": your kubeconfig is missing
- syslog over TLStcpKeep it internal
Remote logging with TLS (rsyslog, syslog-ng).
- Swarm / Serf gossiptcp/udpKeep it internal
Node discovery in Docker Swarm (and other Serf/memberlist clusters).
- HTTP (dev)tcpKeep it internal
Common development server port: Django runserver, python -m http.server, many app servers.
Development servers aren’t built for the internet; put a real web server in front.
- HTTP alternatetcpKeep it internal
Second HTTP port: Jenkins, Tomcat, Traefik’s dashboard, app servers behind a proxy.
Usually sits behind nginx or a load balancer, which talks to it locally.
Related: Nginx "502 Bad Gateway": find the cause in the error log · Docker: "connection refused" to localhost from a container — how to reach the host
- InfluxDBtcpKeep it internal
InfluxDB HTTP API.
- VaulttcpKeep it internal
HashiCorp Vault API and UI. Cluster traffic uses 8201.
- Consul clustertcp/udpKeep it internal
Consul server RPC (8300) and LAN/WAN gossip (8301–8302).
- HTTPS alternatetcpKeep it internal
Second HTTPS port: admin panels, Kubernetes dashboards, app servers.
- ConsultcpKeep it internal
Consul HTTP API and UI. DNS is on 8600.
- MQTT (TLS)tcpKeep it internal
MQTT over TLS.
- JupytertcpNever expose
Jupyter Notebook / JupyterLab.
A notebook runs any code you type on the server — keep it local or behind authentication.
- PHP-FPM / MinIO / SonarQubetcpKeep it internal
Shared by many: PHP-FPM in TCP mode, MinIO’s S3 API, SonarQube, Portainer’s HTTP port.
PHP-FPM must never be reachable from outside — anyone could run PHP code on the server.
Related: Nginx "502 Bad Gateway": find the cause in the error log
- CassandratcpKeep it internal
Cassandra CQL clients. Nodes talk to each other on 7000 (7001 with TLS).
- PrometheustcpKeep it internal
Prometheus web UI and API; also Cockpit on many Linux servers.
No login by default, and your metrics reveal a lot about your systems.
- KafkatcpKeep it internal
Kafka brokers.
- AlertmanagertcpKeep it internal
Prometheus Alertmanager web UI and API.
- node_exportertcpKeep it internal
Prometheus node exporter (machine metrics).
- ElasticsearchtcpNever expose
Elasticsearch / OpenSearch REST API. Nodes talk to each other on 9300.
Many data leaks were Elasticsearch left open to the internet.
Related: Elasticsearch "flood-stage watermark" and read-only indices: free the disk, then check the block
- git daemontcpKeep it internal
git:// protocol — read-only, no authentication or encryption.
- ZabbixtcpKeep it internal
Zabbix agent (10050) and server/trapper (10051).
- kubelettcpNever expose
kubelet API on every Kubernetes node (logs, exec, metrics).
Only the control plane and metrics-server should reach it; if it accepts anonymous requests, anyone can run commands in your pods.
- kube-controller-managertcpNever expose
Controller manager health and metrics (HTTPS).
- kube-schedulertcpNever expose
Scheduler health and metrics (HTTPS).
- Memcachedtcp/udpNever expose
Memcached server.
No authentication, and UDP was used for record-breaking DDoS amplification. Recent versions disable UDP by default.
- RabbitMQ managementtcpKeep it internal
RabbitMQ management UI and HTTP API.
The guest/guest login only works from localhost — create a real admin user.
- Jaeger UItcpKeep it internal
Jaeger tracing web UI.
- MongoDBtcpNever expose
MongoDB server.
Before 3.6 it listened on every address without a password — thousands of databases were wiped and held for ransom. Enable authorization and bind to private addresses.
Related: MongoDB "connect ECONNREFUSED 127.0.0.1:27017": why it refuses, and how to fix it · MongoDB "Authentication failed": the authSource is usually what's wrong
- Kubernetes NodePorttcp/udpKeep it internal
Default range for Service type NodePort; open on every node.
Usually a load balancer in front reaches them; a firewall rule for the whole range on the internet exposes every NodePort service.
- Jenkins agentstcpKeep it internal
Inbound (JNLP / TCP) agents connecting to the Jenkins controller.
- WireGuardudpCan face the internet
WireGuard VPN (the common default — the port is whatever ListenPort says).
Safe to expose: it doesn’t answer packets without a valid key.
Defaults only: any service can be moved to another port, and any program can take a free one. ss and lsof show what really listens.
The address bar updates as you go, so you can bookmark or share the result.
How to use it
- Type a port number (
6443) or a name (redis,kubernetes,docker swarm). - Read what usually listens there and whether it belongs on the internet: can face the internet, keep it internal, or never expose.
- Copy the commands on the right to see what really uses that port on your machine, or to test it from another one.
The link updates as you type, so you can share a lookup like /tools/port-lookup/#6379.
What you get
- The usual suspects for servers and DevOps — databases, web servers, Kubernetes control plane and nodes, Docker and Swarm, monitoring and logging stacks, VPNs, mail and Windows services — with their default ports and protocols.
- An exposure verdict with the reason. Redis, MongoDB, Elasticsearch, the Docker API or the kubelet left open to the internet are some of the most common ways servers get taken over.
- Ranges explained: system ports below 1024 need root to listen on, Linux picks outgoing ports from 32768–60999 by default, and Kubernetes NodePorts default to 30000–32767.
- Links to the articles about errors on that port.
These are defaults. Any service can be moved to another port, and any program can take a free one — only ss or lsof on the machine tells you what is really there.
Common commands
sudo ss -tulpn # everything listening, with the processsudo ss -tulpn 'sport = :5432' # only port 5432sudo lsof -i :80 # which process holds port 80nc -zv db.internal 5432 # can I reach it from here?sudo ufw allow from 10.0.0.0/24 to any port 5432 proto tcp # allow one network onlysudo firewall-cmd --list-ports # open ports on RHEL / Rocky (firewalld)FAQ
“Address already in use” — how do I find out what took the port?
sudo ss -tulpn 'sport = :80' shows the process that listens on it. Stop it, move it, or choose another port. The full walkthrough, with the classic Apache-vs-nginx case, is in Address already in use.
Why does it say “Connection refused” when the service is running?
Usually it listens only on 127.0.0.1, or on another port than you think. ss -tlnp shows the address next to the port: 127.0.0.1:5432 is only reachable from the same machine, 0.0.0.0:5432 from everywhere a firewall allows. If it times out instead, a firewall drops the packets — the difference is explained in “Connection timed out” vs “Connection refused”. See also PostgreSQL connection refused, and Docker container can’t connect to localhost for the container version of the same problem.
Is a service safe if it has a password?
Safer, not safe. A password protects against strangers, but not against brute force or a bug in the service itself. Keep databases, caches and admin APIs on private addresses, and allow only the machines that need them in the firewall. Reach the rest through a VPN or an SSH tunnel: ssh -L 5432:localhost:5432 db-server.
What is the difference between TCP and UDP here?
Most services use TCP. DNS, NTP, syslog, SNMP, VPNs like WireGuard and HTTP/3 use UDP. nc -zv tests TCP; for UDP, nc -zvu can’t tell you much, because a UDP service may simply not answer.
Where can I practice checking ports?
In the lesson Ports: ss, lsof and curl, where two web servers want the same port.
Articles
Learn more
Oracle "ORA-12514: listener does not currently know of service": check the name, then the registration
Fix Oracle ORA-12514: list the services the listener knows, use the right service name, open the PDB, register the database with the listener, and fix LOCAL_LISTENER.
Intermediate · 3 min read
SELinux "avc: denied": read the denial, then fix the label, the boolean or the port
Fix SELinux "avc: denied" on RHEL, Rocky and AlmaLinux: read the AVC line, then fix file labels with restorecon and semanage, booleans with setsebool, or ports.
Intermediate · 4 min read
"No route to host": usually a firewall saying no, sometimes a machine that isn't there
Fix "No route to host" from ssh, curl or nc: check the firewall on the other machine (firewalld rejects by default), then whether the host is up.
Beginner · 4 min read
MongoDB "Authentication failed": the authSource is usually what's wrong
Fix MongoDB "Authentication failed": set authSource correctly, encode special characters in the URI, check which database holds the user, and handle Docker volumes.
Beginner · 4 min read
PostgreSQL "no pg_hba.conf entry for host": allow this connection, the safe way
Fix PostgreSQL "FATAL: no pg_hba.conf entry for host": read the host, user and SSL in the message, add a narrow rule to pg_hba.conf, reload it, and handle Docker and SSL.
Intermediate · 4 min read
Redis "OOM command not allowed when used memory > maxmemory": choose what to do when full
Fix Redis "OOM command not allowed when used memory > maxmemory": read INFO memory, choose an eviction policy, find big keys, set expiry, and raise maxmemory with care.
Intermediate · 3 min read
Windows "The specified domain either does not exist or could not be contacted": it's usually DNS
Fix "The specified domain either does not exist or could not be contacted" when joining a domain: point DNS at a domain controller, test the SRV records, ports and time.
Intermediate · 4 min read
MySQL "ERROR 1130: Host is not allowed to connect": an account is a user and a host
Fix MySQL ERROR 1130 "Host is not allowed to connect to this MySQL server": see which accounts exist, create one for the right host and grant it access, without root.
Beginner · 4 min read
Docker "port is already allocated" and "ports are not available": find who has the port
Fix Docker "Bind for 0.0.0.0:8080 failed: port is already allocated" and "Ports are not available": find the container or process using it, and Windows reserved ports.
Beginner · 4 min read
Nginx reverse proxy with Docker Compose: in a container or on the host
Put Nginx in front of Docker Compose services: on the host or in a container, connect by service name, fix "host not found in upstream", keep ports private, add HTTPS.
Intermediate · 3 min read
Nginx reverse proxy for Node.js and Express, with HTTPS and WebSockets
Set up Nginx in front of a Node.js or Express app: a complete config with HTTPS and WebSockets, a systemd service, trust proxy for real client IPs, and common errors.
Beginner · 3 min read
Oracle "ORA-12541: no listener": start it, or connect to the address it really uses
Fix Oracle ORA-12541 "TNS:no listener" (or "Cannot connect. No listener at host"): start it with lsnrctl, check the host and port, listener.ora, firewalls and Docker.
Beginner · 4 min read
Redis "NOAUTH Authentication required": send the password, the right way for your client
Fix Redis "NOAUTH Authentication required" and WRONGPASS: find the password, send it from redis-cli and your client, set it in a URL, and use ACL users in Redis 6+.
Beginner · 4 min read
Windows "System error 53" and "System error 5" with net use: the network path, and access denied
Fix net use "System error 53: The network path was not found" and "System error 5: Access is denied": check DNS, ports 445 and 139, the share and your credentials.
Beginner · 4 min read
"Cannot connect to the Docker daemon. Is the docker daemon running?": every cause
Fix "Cannot connect to the Docker daemon. Is the docker daemon running?": start the service, read why it failed, check DOCKER_HOST, contexts, Docker Desktop and WSL.
Beginner · 5 min read
Certbot "failed to authenticate some domains": read the Type, then fix DNS, port 80 or the path
Fix Certbot "failed to authenticate some domains": read the error type, then fix DNS records, an IPv6 AAAA record, a closed port 80, the webroot, Cloudflare and CAA.
Intermediate · 5 min read
kubectl "The connection to the server localhost:8080 was refused": your kubeconfig is missing
Fix kubectl "The connection to the server localhost:8080 was refused": kubectl has no kubeconfig. Set it up for kubeadm, k3s, minikube, EKS, GKE or AKS, and under sudo.
Beginner · 3 min read
MongoDB "connect ECONNREFUSED 127.0.0.1:27017": why it refuses, and how to fix it
Fix MongoDB "connect ECONNREFUSED 127.0.0.1:27017" and ::1:27017: start mongod, read exit code 14, check bindIp, IPv6 localhost in Node.js, and Docker service names.
Beginner · 4 min read
MySQL "Can't connect to local MySQL server through socket": find out why (ERROR 2002)
Fix MySQL ERROR 2002 "Can't connect to local MySQL server through socket": is the server running, where is the socket, and why localhost differs from 127.0.0.1.
Beginner · 4 min read
MySQL "ERROR 2003: Can't connect to MySQL server": read the number in brackets
Fix MySQL ERROR 2003 "Can't connect to MySQL server": the number in brackets says if it's a stopped server, bind-address, a firewall or the wrong host in Docker.
Beginner · 4 min read
Oracle "ORA-12154: TNS:could not resolve the connect identifier specified": how to fix it
Fix Oracle ORA-12154: the client can't find your connect identifier. Check tnsnames.ora, TNS_ADMIN and sqlnet.ora, an @ in the password, or use Easy Connect.
Intermediate · 4 min read
RDP "An authentication error has occurred": CredSSP encryption oracle and other causes
Fix Remote Desktop "An authentication error has occurred" and "CredSSP encryption oracle remediation": update both machines, check NLA, passwords, time and port 3389.
Intermediate · 4 min read
SQL Server "Login failed for user" (error 18456): the state tells you why
Fix SQL Server error 18456 "Login failed for user": find the real reason in the log by its state, then fix the password, mixed mode, a disabled login or the database.
Beginner · 5 min read
SQL Server "A network-related or instance-specific error" (error 40, error 26): how to fix it
Fix SQL Server "A network-related or instance-specific error occurred": check the service, TCP/IP, the instance name, SQL Browser, port 1433 and the Windows firewall.
Intermediate · 4 min read
Windows "The RPC server is unavailable" (0x800706BA): how to find what blocks it
Fix "The RPC server is unavailable" (0x800706BA, error 1722): check the name, port 135, the dynamic ports, the firewall rules and the RPC services, step by step.
Intermediate · 4 min read
"Connection timed out" vs "Connection refused": what each one tells you, and how to fix it
Timed out means a firewall dropped the packets; refused means nothing listens there. Tell them apart with nc and curl, then fix ufw, firewalld or the bind address.
Beginner · 5 min read
Docker: "connection refused" to localhost from a container — how to reach the host
Fix "connection refused" when a container connects to localhost: use host.docker.internal or a Compose service name, make the host service listen, and check the firewall.
Beginner · 4 min read
PostgreSQL "Connection refused … Is the server running?": find out why nothing answers on 5432
Fix PostgreSQL "connection refused": check that it runs, read why it did not start, then fix listen_addresses, the port, the firewall or Docker.
Beginner · 3 min read
"Address already in use": find who is using port 80 (or any port)
Fix "bind() failed (98: Address already in use)": find the process holding the port with ss or lsof, then stop it, move it, or change your port.
Beginner · 5 min read