Skip to content

Ports Reference

Use this when configuring firewalls, reverse proxies, or port forwards.

PortProtocolDirectionRequired?Purpose
8080TCPinboundYesHTTP UI + API (default)
8443TCPinboundYes (if multi-host)Agent mTLS connections
80TCPinboundOnly for ACMELet’s Encrypt HTTP-01 challenge
443TCPinboundIf public HTTPSHTTPS UI via embedded Caddy
25 / 587 / 465TCPoutboundOnly for email alertsSMTP

The server does not need any inbound port beyond 8080 and 8443 for basic operation. The reverse proxy (embedded Caddy) handles 80/443 when enabled.

PortProtocolDirectionRequired?Purpose
(none)TCPinboundNoAgents connect outbound only
8443 (server)TCPoutboundYesmTLS to dockmesh server
443 (registries)TCPoutboundYesImage pulls from Docker Hub, ghcr.io, etc.

No inbound ports on agent hosts. This is the fundamental dockmesh design.

dockmesh talks to the local Docker daemon via Unix socket by default:

Path / PortPurpose
/var/run/docker.sockDefault, recommended
tcp://:2375Docker HTTP API (insecure — don’t expose)
tcp://:2376Docker HTTPS API (requires mTLS)

If you must use TCP: enable mTLS (DOCKMESH_DOCKER_TLS_VERIFY=true), restrict to loopback.

When Reverse Proxy is enabled:

PortPurpose
80HTTP → HTTPS redirect + ACME challenges
443Public HTTPS for routed stacks
2019Caddy admin API (localhost only, used by dockmesh internally)
PortPurpose
9090Prometheus metrics (if scraper enabled, via /metrics path on 8080)
ConfigurableGrype scanner has no listener — runs as a CLI-invoked binary

Containers you deploy publish ports as they like. dockmesh doesn’t reserve any range.

Typical self-host ports to avoid conflicting with (depending on what you deploy):

PortCommon use
22SSH (host)
25, 587, 465SMTP
53DNS (Pi-hole, Unbound)
80, 443Web (Caddy)
1883, 8883MQTT
3000n8n, Grafana
3306MySQL
5432PostgreSQL
5678n8n
6379Redis
8080dockmesh UI
8123Home Assistant
8443dockmesh agent
9000MinIO, Portainer
9090Prometheus
9100node-exporter
Terminal window
# On the dockmesh server
ufw default deny incoming
ufw allow from <trusted-subnet> to any port 8080 proto tcp
ufw allow from <agent-subnet> to any port 8443 proto tcp
ufw allow 443/tcp
ufw allow 80/tcp # for ACME
ufw enable
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iifname lo accept
ct state established,related accept
tcp dport { 80, 443 } accept
ip saddr 10.0.0.0/8 tcp dport 8080 accept
ip saddr 10.0.0.0/8 tcp dport 8443 accept
}
}
  • Inbound 8080/tcp from your VPN subnet only
  • Inbound 8443/tcp from your VPC’s private subnet (where agents live)
  • Inbound 80/tcp and 443/tcp from 0.0.0.0/0 (public apps)
  • Outbound allowed to Docker Hub, your registry, SMTP