Skip to content

Conditions, not a stream of repeats

Rules on die, kill, OOM and unhealthy; thresholds sustained over N seconds; log patterns; restart frequency; and network rates or a rise in dropped packets and interface errors. A condition goes firing → escalated → eased → resolved, so overlapping thresholds make one incident. The feed hides repeats and shows “still firing · 27m” instead.

127.0.0.1:8470
The alert feed: one row per condition with severity, kind icon, “still firing” duration and a repeat count.

Maintenance windows

Silence delivery for a host, project, container, rule or severity — once or weekly — without switching monitoring off: alerts are still recorded and shown as silenced. A reason and the author are audited. A successful deploy opens a short window for its own stack automatically, so a restart is not mistaken for an incident.

127.0.0.1:8470
The maintenance tab: scheduled and running windows with scope, recurrence and reason.

Delivery you can check

Webhooks with Go-template bodies and e-mail over SMTP. Every attempt is recorded against its alert; when the receiving endpoint times out or answers 429 or 5xx, delivery is retried up to five times with exponential backoff, while a configuration error is reported instead of retried.

127.0.0.1:8470
Alert rules with type, target, severity and cooldown.

The complete list

Everything in alerting

Rules with a lifetime, delivered where you look.

  • Rules on state (die, kill, oom, unhealthy), resource thresholds sustained over N seconds (CPU, memory, network RX/TX), log patterns, restart or crash-loop frequency, and a network rule that fires on an increase in dropped packets or interface errors within a window.
  • Editable severity and cooldown, targeting containers by name substring.
  • Conditions have a lifetime — firing, escalated, eased, resolved — so overlapping thresholds produce one incident instead of one alert each. Repeats are hidden in the feed by default.
  • Notify via webhooks with Go-template bodies, email over SMTP with per-rule and per-account recipients, and an in-app feed with a toast on arrival.
  • Every webhook call and e-mail is recorded with its outcome; transient failures are retried up to 5 times (1, 2, 4, 8, 16 minutes).
  • Only an admin can add or delete a webhook; everyone else sees its name, method and host, never the URL or header values, and can attach existing webhooks to rules.
  • Maintenance windows by host, stack, container, rule or severity, one-off or weekly, audited, with an automatic short window after each deploy.
  • Image update alerts when the registry starts serving a new digest for a running service’s tag.
  • A Prometheus /metrics exporter including live firing conditions, and alert rules import and export as a portable JSON bundle.

In the user manual

Try it on one host tonight

It is one binary and a named volume. If you do not like it, delete both — nothing on your Docker hosts was changed to accommodate it.

Docker Commander v1.7.2 — Docker, hardened
docker run -d --name dockercmd \
  -p 127.0.0.1:8470:8470 \
  --group-add "$(stat -c '%g' /var/run/docker.sock)" \
  --read-only --tmpfs /tmp \
  --security-opt no-new-privileges \
  --cap-drop ALL \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v dockercmd-data:/data \
  ghcr.io/koduj-dev/docker-commander:latest

Read-only root filesystem, no added capabilities, no privilege escalation, bound to localhost. On rootless Docker or Docker Desktop, drop the --group-add line.

Show the minimal command
Docker — minimal
docker run -d --name dockercmd -p 127.0.0.1:8470:8470 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v dockercmd-data:/data \
  ghcr.io/koduj-dev/docker-commander:latest

Fewer flags, and correspondingly fewer guardrails. Fine for a throwaway look on a machine you do not mind losing; the hardened form above is what belongs on anything you keep.

MIT licensed · no account · no telemetry · Linux, macOS and Windows