Pods in the same account can reach each other privately, on any port, on any machine, by name:
svl run -d --name db --private -e POSTGRES_PASSWORD=s3cret postgres:17
svl run -d --name app -e DATABASE_URL=postgres://postgres:s3cret@db.internal:5432/postgres ghcr.io/me/app:latest
db.internal resolves to the private address of the pod named db. It follows the name, so after svl stop db and a new svl run --name db, the same name reaches the new pod.
Who can connect
- Every pod in your account can reach every other pod in your account, on any TCP or UDP port.
- Nothing else can: not other svl accounts, not the internet, not serverless.au's own machines. A pod's private address is useless outside your account.
- Traffic between machines is encrypted (WireGuard).
There's nothing to set up and nothing to open: --private keeps the database off the internet, and your other pods reach it anyway.
Names
<name>.internal: the running pod(s) with that name. Several pods with one name give several addresses.<pod-id>.internal: one specific pod.- Plain
<name>works too (the search domain is.internal).
Names only resolve inside your account: another account's db.internal is a different pod (or nothing).
Addresses
Each pod has a private IPv4 address (10.240.x.x) and IPv6 address (fd67:6300:…). svl inspect <pod> shows them as private_ip4 / private_ip6. Addresses change when a pod is replaced, so connect by name.
Make your app listen
Your app must listen on all interfaces, 0.0.0.0 (IPv4) or :: (IPv4 and IPv6), not 127.0.0.1. Most images already do (Postgres, Redis, nginx). For your own code, --host 0.0.0.0 or the equivalent setting.
From your laptop
Private addresses aren't reachable from outside serverless.au. To reach a private port from your machine, use svl forward.