Two Philosophies: Act vs Notify
The Watchtower vs Diun debate is really a question about how much you trust automation. Watchtower acts: it detects a new image digest, stops the old container, and recreates it — all while you sleep. Diun notifies: it watches the same registries and pings you on Discord, email or Telegram — but never touches a running container. You decide when (and whether) to update.
Head-to-Head Comparison
| Watchtower | Diun | |
|---|---|---|
| Core behavior | Recreates containers automatically | Sends notifications only |
| Risk profile | Higher — unattended changes | Lower — human approves every update |
| Best for | Stateless apps (Plex, Pi-hole, dashboards) | Databases, Nextcloud, Home Assistant |
| Monitor-only mode | Yes — WATCHTOWER_MONITOR_ONLY=true | N/A — notify-only by design |
| Notifications | Shoutrrr (Discord, email, Slack, Telegram…) | Broad provider support |
| Maintenance (2026) | Use a maintained fork | Active upstream |
When to Choose Watchtower
Choose Watchtower when your apps are stateless — a restart is harmless — and manual updates eat your weekends. Pair it with notifications so you always know what changed, and exclude risky containers with labels:
services:
watchtower:
image: nickfedor/watchtower:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_LABEL_ENABLE=true # opt-in per container
services:
postgres:
image: postgres:16
labels:
- "com.centurylinklabs.watchtower.monitor-only=true"
When to Choose Diun
Choose Diun when you run stateful systems where a major-version jump needs your eyes first, or when you simply prefer a weekly "update session" over silent automation:
services:
diun:
image: crazymax/diun:latest
command: serve
volumes:
- "./diun-data:/data"
- "/var/run/docker.sock:/var/run/docker.sock"
environment:
- "TZ=Asia/Karachi"
The Power Combo: Run Both
Many experienced homelabbers run both tools: Watchtower in full auto mode on stateless apps (with cleanup + notifications), and Diun watching everything so databases still generate "update available" pings for manual handling. They don't conflict — Diun never modifies containers.
Verdict
There is no universal winner. Automate the boring, supervise the critical. If you must pick one tool today, Watchtower with WATCHTOWER_MONITOR_ONLY=true as the default — flipping individual containers to full auto-update via labels — covers about 90% of Diun's use case in a single container.