Public URLs for local Docker apps.
RunDock gives your local services a public HTTPS URL through one command — test webhooks, share previews, and demo work-in-progress without deploying or opening router ports.
no config · no open ports · valid TLS
The problem
localhost is a dead end for the outside world.
Your app runs fine on your machine — until something outside your machine needs to reach it.
-
✕
Webhooks are hard to test locally
Stripe, Telegram, and GitHub need a public endpoint to call.
localhost:3000isn't one, so you end up guessing instead of debugging. -
✕
localhost can't receive external callbacks
OAuth redirects, payment confirmations, delivery receipts — they all dead-end before they ever reach your machine.
-
✕
Sharing work-in-progress requires deployment
A client wants to see today's progress, and suddenly you're spending an hour on a staging deploy for a five-minute look.
-
✕
Compose services are annoying to expose temporarily
The service runs happily on the Docker network. Showing it to anyone outside that network is port-mapping homework.
-
✕
Opening router or firewall ports is unsafe
Port forwarding exposes your whole machine, needs router access you might not have, and breaks the moment your network changes.
With RunDock
Expose local Docker apps in seconds.
Not another complex cloud platform — just simple tunnels for real development workflows.
-
✓
Start a tunnel with one command
rundock tunnel 3000— nothing to configure, nothing to deploy. -
✓
Get a public HTTPS URL
TLS terminates at the gateway with a valid certificate. The URL is shareable the second it prints.
-
✓
Inspect incoming requests
Headers, body, and timing for every webhook that arrives — see exactly what the provider sent.
-
✓
Replay failed requests
Fix your handler, hit replay. No need to trigger the payment or re-send the bot message.
-
✓
Protect tunnels with passwords
Previews for your client — not for the whole internet.
-
✓
Temporary or reserved subdomains
Throwaway URLs by default. Stable names when a webhook config needs to survive restarts.
How it works
One route, plotted end to end.
A request from the internet follows a single charted course down to your machine — and never the other way around.
The agent dials out and keeps one encrypted connection open. Nothing on your machine listens for inbound traffic, no router ports open, no firewall edits — close the terminal and the URL is gone.
Features
Everything a tunnel should do. Nothing it shouldn't.
A public URL with a valid certificate, seconds after the command.
A stable public endpoint for provider callbacks, pointed at your laptop.
Headers, bodies, and timing for every request that comes through.
Re-send any captured request after you fix the handler.
Expose a service by name — no port-mapping arithmetic.
Basic auth in front of any tunnel, set with one flag.
Keep bright-fox, or pick a name that sticks.
Bring api.yourapp.com when v1.0 lands.
Everything from the terminal. No dashboard required.
Pairs with the server, Compose stack, and Traefik you already run.
Use cases
The unglamorous problems it actually solves.
Paste your tunnel URL into the Stripe dashboard and catch checkout.session.completed on your own machine, with the real payload.
Point setWebhook at your tunnel and iterate on the handler live — no redeploy between attempts.
Send a link instead of shipping a deploy. Add --auth so only the client sees it.
Your phone on LTE talks to the API on your laptop over plain HTTPS — no simulator networking tricks.
rundock expose web puts one service online. The rest of the stack stays private on the Docker network.
A URL that lives exactly as long as the demo — then disappears without cleanup.
The CLI
Four commands cover most days.
The terminal is the interface. The inspector is there when you need to see what actually arrived.
- POST/webhooks/stripe 200142 ms REPLAY
- POST/webhooks/stripe 50089 ms REPLAY
- POST/bot/callback 20061 ms REPLAY
- GET/health 2003 ms REPLAY
- POST/webhooks/stripe 200118 ms REPLAY
Where it fits
A narrow tool, on purpose.
ngrok is powerful and broad. Cloudflare Tunnel is a great fit when your infrastructure already lives on Cloudflare. RunDock aims narrower: simple tunnels for Docker apps, webhook testing, and indie-dev VPS workflows — and nothing beyond that.
| Feature | Generic tunnel tools | RunDock |
|---|---|---|
| Local HTTP tunnels | Standard | One command |
| Webhook debugging | Varies by tool and plan | Inspector + replay, built in |
| Docker Compose workflow | Manual port mapping | rundock expose <service> |
| Request replay | Sometimes available | Core feature |
| Indie VPS workflow | Not the focus | The target user |
| Simple CLI-first setup | Config files and dashboards | Zero-config default |
Roadmap
Charted course, honest waypoints.
RunDock is in early development. This is the plan as it stands — waypoints may shift as the water gets real.
-
v0.1 building now
HTTP tunnelsrandom subdomainsrequest logs
-
v0.2
dashboardrequest replaypassword protection
-
v0.3
Docker Compose autodetectreserved subdomains
-
v1.0
custom domainsteamspaid plansself-hosted gateway
Waitlist
Start testing webhooks without deploying.
Leave an email and we'll write once there's something to run.
RunDock is currently in early development.