chowkidar

chowkidar

Docker app from DMF's Repository

Overview

Lightweight Docker health monitor with configurable restart and notification actions. Watches containers for unhealthy health events and exited states, then reacts automatically. Supports Discord, Slack, Telegram, ntfy, Gotify, Pushover, email, and plain Apprise URLs.

Chowkidar

Lightweight Docker health monitor with configurable restart and notification actions.

Chowkidar watches your containers for unhealthy health events and exited states, then reacts automatically — restarting, stopping, or running a custom script — and sends notifications via Discord, Slack, Telegram, email, and more.

License: AGPL-3.0 Build Docker Pulls Image Size Go GitHub Stars


Features

  • Container monitoring — polls Docker for unhealthy and exited containers; supports Docker-native health checks and custom bash health-check scripts per job
  • Configurable actionsrestart, start, stop, none, run-script per job
  • Per-job health-check script — define a bash script that determines container health (exit 0 = healthy, non-zero = unhealthy); dry-run and template picker included
  • Per-job overrides — individual retry count, monitoring interval, action timeout, and post-action wait
  • Multi-context job rules — pin each job to one or more Docker contexts; jobs with no context run on all hosts
  • Multi-provider notifications — Discord, Slack, Telegram, ntfy, Gotify, Pushover, SMTP/email, raw Apprise URLs
  • Notification templates — customise message content per provider per lifecycle event
  • Jobs system — define targeted monitoring rules with container name/label/env var filters
  • Bash script action — run a custom inline script per job with built-in templates, dry-run execution, and automatic template upgrade detection
  • Multi-Docker-host — monitor containers across multiple Docker hosts or sockets; each host individually enabled/disabled with its own monitoring interval, ping timeout, and offline confirm window
  • Per-host offline notifications — configure notification agents and custom message templates per Docker host; notifies once on down, once on recovery (no spam)
  • Web UI — dashboard, jobs, notification profiles, action history, settings
  • Authentication — optional username/password protection with bcrypt hashing
  • Encryption — notification credentials encrypted at rest via CHOWKIDAR_SECRET_KEY
  • 3 dashboard layouts — Card List, Compact Table, Status Grid; service groups are collapsible with state persisted across reloads
  • Dashboard filters — filter by status, tag, job action, Docker host, container name, label, env var, and job name; advanced filters panel for power users
  • Maintenance windows — schedule service pauses using six strategies (Manual, Single Window, Cron, Interval, Day of Week, Day of Month); targets jobs or Docker hosts (mutually exclusive); optional effective date ranges; per-window control over queued/in-flight action handling when a window opens (allow-finish / cancel-queued / force-cancel); bell notifications on start and end; auto-prune of expired single-occurrence windows
  • Notification bell — persistent system alerts (boot, failed recovery, paused monitoring) with per-alert dismiss and mark-all-read
  • Version check — settings sidebar shows running version; background check surfaces a bell alert when a newer release is available
  • Light/dark/auto theme
  • Persistent config — everything stored under /config (YAML + JSON history + logs)
  • Docker socket proxy support for reduced attack surface

Quick Start

docker compose up -d

Open http://localhost:8080


Development

Runs with live reload via Air. Go file changes rebuild the binary automatically; web/ is served directly from disk so HTML/CSS/JS changes are visible on refresh with no rebuild.

docker compose -f docker-compose.dev.yml up --build

Open http://localhost:8080


Docker CLI

docker run -d \
  --name chowkidar \
  --restart unless-stopped \
  -p 8080:8080 \
  -e CHOWKIDAR_SECRET_KEY=your-long-random-secret \
  -v /mnt/user/appdata/chowkidar:/config \
  -v /var/run/docker.sock:/var/run/docker.sock \
  darkmatterforge/chowkidar:latest

Environment Variables

Most settings are configured through the web UI (Settings page) and persisted to /config/config.yaml. The env vars below are the ones you typically set at container creation time. Every env var still overrides the config file if set.

Required at startup

Variable Default Description
CHOWKIDAR_SECRET_KEY Encryption key for notification credentials. Set to a random 32+ char string. If unset, credentials are stored as plaintext. Cannot be changed after first use.
APP_PATH /config Base directory for config, database and logs. Must match your volume mount.
APP_PORT 8080 HTTP port the server listens on.

Docker connectivity

Chowkidar connects to Docker via the mounted socket by default. Additional Docker hosts are added through Settings → Docker Hosts in the web UI. Each host can be individually enabled/disabled and has its own monitor interval, ping timeout, and offline notification settings.

Variable Default Description
DOCKER_HOST Override the primary Docker endpoint (e.g. tcp://socket-proxy:2375 if using a socket proxy). Leave unset to use the mounted socket.
DOCKER_SOCKET_PATH /var/run/docker.sock Path to the mounted socket inside the container. Only change if using a non-standard socket location.

Container filtering

Useful to set at the container level so monitoring starts correctly on first boot:

Variable Default Description
CONTAINER_NAME Comma-separated container names to monitor. Leave empty to watch all.
CONTAINER_LABEL Watch only containers with this label.
CONTAINER_ENV_VAR Watch only containers with this env var value.

Logging

Variable Default Description
LOG_LEVEL info debug / info / warn / error. Useful for troubleshooting at startup.

Advanced overrides

All of these are also configurable via the web UI. Set as env vars only if you need to enforce values that the UI cannot override (e.g. in a managed deployment).

Variable Default Description
ACTION restart Default action: restart / start / stop / none / run-script
RETRY_COUNT 3 Action retry attempts
RETRY_DELAY 10 Seconds between retries
WORKER_COUNT 2 Parallel action workers
QUEUE_SIZE 64 Action queue capacity
ACTION_TIMEOUT_SECONDS 20 Per-action timeout (seconds)
STARTUP_DELAY_SECONDS 0 Seconds to wait before monitoring begins
START_EXITED false Auto-start exited containers
REQUIRE_FILTER_FOR_EXITED true Require a filter before acting on exited containers
APPRISE_NOTIFICATION_SERVICES Comma-separated Apprise URLs (alternative to UI notification profiles)
NOTIFICATION_RATE_PER_SEC 5 Max notifications per second
NOTIFICATION_COOLDOWN_SECONDS 3600 Min seconds between repeated notifications per container
EXTERNAL_HOSTNAME Hostname shown in notification payloads
PRIMARY_BASE_URL Public base URL for links in notifications
RUN_SCRIPT_PATH Script path for the run-script action
DISPLAY_TIMEZONE UTC IANA timezone for web UI timestamps
SERVER_TIMEZONE UTC IANA timezone for scheduling
LOG_TO_FILE true Write logs to $APP_PATH/logs/
LOG_RETENTION_DAYS 7 Log file retention in days
HTTP_CLIENT_TIMEOUT_SECONDS 15 HTTP client timeout
DOCKER_PING_TIMEOUT_SECONDS 5 Docker daemon liveness ping timeout
DOCKER_CLIENT_RETRY_COUNT 1 Docker client retry attempts
DOCKER_CLIENT_RETRY_DELAY_SECONDS 2 Seconds between Docker client retries

Notification Providers

Configure via the web UI under Settings → Notifications.

Provider Notes
Discord Webhook URL
Slack Incoming webhook
Telegram Bot token + chat ID
Email (SMTP) Full SMTP config with optional DKIM signing
ntfy Self-hosted or ntfy.sh
Gotify Self-hosted Gotify server
Pushover Mobile push alerts
Webhook HTTP POST to any URL
Apprise URL Any raw Apprise service URL

Notification Events

Templates can be customised per provider for each lifecycle event:

Event Trigger
bootUp Chowkidar started and Docker is reachable
unhealthyDetected Container health check failed
retrying Recovery action attempt N of M
cooldown Monitoring paused after action
containerRecovered Container returned to healthy
actionFailed Action execution error
retryLimit Max retries exhausted

Template variables: {}, {}, {}, {}, {}, {}, {}


API

Method Path Description
GET /api/health Liveness check — returns version, bootTime, latestVersion
GET /api/diagnostics Docker socket diagnostics
GET /api/containers Watched containers
GET/PUT /api/settings App settings
PUT /api/settings/theme Save theme preference
GET/POST /api/jobs List / create jobs
PUT/DELETE /api/jobs/{id} Update / delete a job
GET/PUT /api/notifications Notification profiles
DELETE /api/notifications/{id} Delete a notification profile
POST /api/test-notification Send a test notification
POST /api/scripts/dry-run Execute a script in an isolated container without triggering real actions
POST /api/scripts/dry-run/cleanup Clean up dry-run containers
GET/PUT /api/scripts Script allowlist
GET/PUT /api/docker-hosts Multi-host profiles
GET /api/docker-hosts/status Multi-host status
GET/DELETE /api/history Action history / clear all history
POST /api/action Trigger a manual action
POST /api/containers/{id}/reset-cooldown Reset monitoring cooldown for a container
GET /api/system-alerts Active system alerts (bell notifications)
POST /api/system-alerts/dismiss Dismiss alerts by ID
GET /api/auth/status Auth state and setup status
POST /api/auth/login Login
POST /api/auth/logout Logout
POST /api/auth/change-password Change password
POST /api/auth/disable Disable authentication

Unraid

Install via Community Applications or add the template manually:

https://raw.githubusercontent.com/darkmatterforge/chowkidar/main/unraid/chowkidar.xml

Map /mnt/user/appdata/chowkidar/config and set CHOWKIDAR_SECRET_KEY.


License

AGPL-3.0 — Copyright (C) 2026 Dark Matter Forge.

You may use and build on this software, but any modified version must remain open source under the same terms. See NOTICE for full usage terms and trademark information.

Install Chowkidar on Unraid in a few clicks.

Find Chowkidar in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Chowkidar Review the template variables and paths Click Install

Download Statistics

60
Total Downloads

Related apps

Explore more like this

Explore all

Details

Repository
darkmatterforge/chowkidar:latest
Last Updated2026-06-01
First Seen2026-06-01

Runtime arguments

Web UI
http://[IP]:[PORT:8080]/
Network
bridge
Shell
sh
Privileged
false

Template configuration

Web UI PortPorttcp

Port for the Chowkidar web interface. Open this port in your browser to access the dashboard.

Target
8080
Default
8080
Config PathPathrw

Directory where Chowkidar stores its config file, SQLite database, and logs. Must be a persistent path — data will be lost on container removal if not mapped.

Target
/config
Default
/mnt/user/appdata/chowkidar
Docker SocketPathrw

Docker socket used to monitor containers and perform actions (restart, stop, etc.). Required — do not change unless you are using a Docker socket proxy.

Target
/var/run/docker.sock
Default
/var/run/docker.sock
Secret KeyVariable

Encryption key used to protect notification credentials (webhook URLs, passwords, tokens) stored on disk. Set this to a long random string (e.g. 32+ characters). If left empty, secrets are stored as plaintext. Once set, do not change this value or your saved credentials will become unreadable.

Target
CHOWKIDAR_SECRET_KEY
App Data PathVariable

Internal container path where Chowkidar stores its config, database and logs. Must match the container path of your Config Path volume mapping above. Only change if you have remapped the config volume to a different container path.

Target
APP_PATH
Default
/config
Log LevelVariable

Controls how much detail is written to the log. Options: debug (most verbose, useful for troubleshooting), info (normal operation), warn (warnings only), error (errors only). Default: info.

Target
LOG_LEVEL
Default
info