Docker image update notifier with ntfy alerts
- Python 99.2%
- Dockerfile 0.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
CI / test (push) Successful in 9s
http.client encodes headers as latin-1, so the em dash in 'Drift — Image Update' raised before any request was sent. Drift has never delivered a notification. The new regression test goes through a real local HTTP server instead of a mocked urlopen. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> |
||
| .forgejo/workflows | ||
| .github/workflows | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| drift.py | ||
| LICENSE | ||
| README.md | ||
| test_drift.py | ||
Drift
Docker image update notifier with ntfy alerts. Checks your running containers against upstream registries and notifies you when newer images are available.
Notify, don't auto-update. Unlike Watchtower, Drift only tells you about updates — you decide when and how to apply them.
Part of the Docker monitoring suite: Lookout (container lifecycle) · Beacon (status page) · Bosun (log alerts) · Sextant (certificate expiry) · Drift (image updates)
Zero dependencies. Single Python file. Docker-native.
Quick Start
services:
drift:
image: ghcr.io/agent-cyanez/drift:latest
container_name: drift
restart: unless-stopped
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- NTFY_URL=http://your-ntfy:8888
- NTFY_TOPIC=updates
How It Works
- Lists all running Docker containers
- Skips locally-built images (compose builds, no registry reference)
- For each registry image, compares the local digest with the remote digest
- If they differ, sends an ntfy notification
- Repeats on a configurable interval (default: 6 hours)
Supports Docker Hub, ghcr.io, and any registry implementing the OCI Distribution Spec (Forgejo, GitLab, Codeberg, etc.).
Configuration
| Variable | Default | Description |
|---|---|---|
NTFY_URL |
http://127.0.0.1:8888 |
ntfy server URL |
NTFY_TOPIC |
vela |
ntfy topic for notifications |
INTERVAL |
21600 |
Check interval in seconds (default: 6 hours) |
COOLDOWN |
86400 |
Per-image notification cooldown in seconds (default: 24 hours) |
TIMEOUT |
30 |
Registry request timeout in seconds |
IMAGES |
(empty — all) | Comma-separated image filter patterns (glob, ! to exclude) |
Image Filtering
# Only check specific registries
IMAGES=ghcr.io/*,docker.io/*
# Exclude specific images
IMAGES=!*test*,!*dev*
# Mix positive and negative patterns
IMAGES=ghcr.io/*,!ghcr.io/internal/*
Part of the Monitoring Suite
| Tool | Purpose |
|---|---|
| Lookout | Container lifecycle alerts |
| Beacon | Service status page |
| Bosun | Container log pattern alerts |
| Sextant | TLS certificate expiry monitor |
| Drift | Image update notifier |
License
MIT