All clear
The container answers on its own Docker IP and the control plane lists the service as approved. Slow answers are flagged as slow, not counted as fine.
Every DockTail host and service in one view. Cloud ties container health, Docker events, and Tailscale control-plane state into incidents you can act on.
30-day trial · cancel any time · one environment variable
Diagram: DockTail Cloud watches every hop of a published service — host, container, local reachability, and tailnet exposure — across every host in the fleet.
OOM-killed by Docker, exit 137. The tailnet still advertises the service, so re-publishing it changes nothing. 40 log lines captured at the moment of failure.
DockTail Cloud in 60 seconds
One service down, two possible culprits: the container or its Tailscale exposure. Cloud checks from both sides and says which one.
No monitors to define
Every docktail.* label you've already written is a monitor definition. Cloud never asks you for a URL, a port, or an interval — the target is read from Docker, on the host, on every pass.
grafana:
image: grafana/grafana:11.3.0
labels:
- docktail.service.enable=true
- docktail.service.name=grafana
- docktail.service.port=3000 Start a labeled container and it's watched on the next pass. Remove it and its monitor goes with it.
Set the key on another machine and every service it publishes shows up, described by its own labels.
Config picks the shape of a check. The target always comes from the agent's own Docker discovery.
The useful distinction
A plain uptime check has one opinion: down. Cloud probes the container from inside the host and asks the Tailscale control plane whether the service is published, then reads both answers together.
The container answers on its own Docker IP and the control plane lists the service as approved. Slow answers are flagged as slow, not counted as fine.
The app is healthy and nobody can reach it. Tailscale isn't publishing the service: awaiting approval, never advertised, or gone. Restarting the app fixes nothing.
The service is still advertised and approved, so re-publishing it is wasted effort. The process behind it stopped answering, and the Docker event that killed it is attached.
Nothing answers locally and the control plane doesn't list the service. Usually a deploy that never came up. There is nothing running to restart.
When a host says nothing at all
Detection runs in Cloud, so it works whether your machine does or not. When a host's heartbeats stop, Cloud already knows from its peers whether the device is still there.
Peers still see prod-01 in their netmap. The machine is fine. The DockTail process isn't.
No peer sees the device any more. Last seen 4m ago. The machine is gone.
Incidents
You don't get a red dot and a graph to interpret. You get the failure, the vantages that disagreed, and the last thing the container said before it died.
Exit code, OOM kill, restart count, health transition — the Docker event that caused the outage, attached to the outage it caused.
Captured when the failure fires, not scraped minutes later from a container that has already restarted. Secrets are redacted on the host and the tail is capped at 40 lines.
Slack, Telegram, ntfy, webhook, email — recoveries included, so you know it's over without going to look.
14:22:04 lvl=eror msg="query failed" ds=prometheus
14:22:05 lvl=info msg="alerting refresh" auth=[redacted]
14:22:06 fatal: runtime: out of memory
14:22:06 goroutine stack exceeds 1000000000-byte limit The whole machine
Services aren't the only thing that goes wrong. Every host reports CPU, memory, load and temperature over the connection it already holds.
No node_exporter, no Prometheus, no second dashboard. The agent reads /proc itself.
A read-only inventory of everything else running on the host, with opt-in failure alerts on the ones that matter.
API + MCP
Everything above is available to Claude Code, Cursor, Codex or your own scripts — through a REST API and a remote MCP server, on every plan.
Ask your agent what broke. It reads the incident, both vantages and the log tail, and names the layer — the same evidence you get.
A read key inspects. Only a read_write key can acknowledge, resolve, or open a maintenance window, and nothing can run on a host.
> Anything wrong on db-01?
db-01 is up but under pressure: memory at 29.4 of 32 GB, load 4.1, 79 °C. All 6 services answer on both vantages, so nothing is down yet — it's the box, not a container.
Setup
Create a workspace key, add one environment variable, and restart DockTail. Hosts register themselves by Docker engine identity.
services:
docktail:
environment:
- DOCKTAIL_CLOUD_KEY=dtc_7f3a...c91e Privacy
The software next to your containers should be inspectable. The data it sends should stay yours.
The whole DockTail client — Cloud reporting included — is open source.
Everything to Cloud rides an encrypted WebSocket (WSS).
Bounded, redacted on the host, and one toggle away from off.
One credentialed host per tailnet, and every agent enforces its own 60-second floor.
Pricing
Flat pricing by host count. Services are not metered, and every plan gets all three vantages and API & MCP access.
Card required at checkout, nothing charged for 30 days. Cancel any time before then and you pay nothing.
Questions
The things people ask right after reading the prices.
docktail.* labels you already wrote, and detection runs outside your network. Full comparison →
Set DOCKTAIL_CLOUD_KEY on the DockTail agent you already run. Every host and service shows up in the dashboard — no second binary, nothing dialing in. Homelab and Team start with a 30-day trial.