All apps · 0 apps
chowkidar
Docker app from DMF's Repository
Overview
Readme
View on GitHubChowkidar
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.
Features
- Container monitoring — polls Docker for
unhealthyand exited containers; supports Docker-native health checks and custom bash health-check scripts per job - Configurable actions —
restart,start,stop,none,run-scriptper 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.
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
darkmatterforge/chowkidar:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8080]/- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Port for the Chowkidar web interface. Open this port in your browser to access the dashboard.
- Target
- 8080
- Default
- 8080
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 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
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
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
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