Watchtower Notification System Overview
Watchtower Docker notifications are powered by Shoutrrr — a notification library that supports 20+ services via a unified URL scheme. Notifications are sent when:
- A container is successfully updated to a new image
- An update fails (pull error, restart error)
- Optionally: when no updates are found (configurable)
Slack Notifications
services:
watchtower:
image: containrrr/watchtower
environment:
- WATCHTOWER_NOTIFICATIONS=slack
- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=https://hooks.slack.com/services/T.../B.../xxx
- WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower # Bot display name
- WATCHTOWER_NOTIFICATION_SLACK_ICON_EMOJI=:whale:
- WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#deployments
Create a Slack webhook at api.slack.com/messaging/webhooks and paste the URL into WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL.
Email (SMTP) Notifications
environment:
- WATCHTOWER_NOTIFICATIONS=email
- WATCHTOWER_NOTIFICATION_EMAIL_FROM=watchtower@example.com
- WATCHTOWER_NOTIFICATION_EMAIL_TO=admin@example.com
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.gmail.com
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=user@gmail.com
- WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=yourAppPassword
- WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2 # Batch delay in seconds
Modern Method: WATCHTOWER_NOTIFICATION_URL (Shoutrrr)
The newer and preferred method uses Shoutrrr URL strings — one variable covers any notification service:
# Slack via Shoutrrr
- WATCHTOWER_NOTIFICATION_URL=slack://token-a/token-b/token-c
# Telegram
- WATCHTOWER_NOTIFICATION_URL=telegram://botToken@telegram?channels=channelID
# Discord
- WATCHTOWER_NOTIFICATION_URL=discord://token@webhookID
# Gotify (self-hosted)
- WATCHTOWER_NOTIFICATION_URL=gotify://hostname/token
# Multiple services (separate with space)
- WATCHTOWER_NOTIFICATION_URL=slack://... gotify://...
Log Level and Docker Logs
Control what appears in watchtower docker logs with the log level:
environment:
- WATCHTOWER_DEBUG=false # Set to true for verbose debug output
# OR use log level directly:
# Passed as a CLI flag:
# command: --log-level debug
View docker watchtower logs in real time:
# Follow live
docker logs watchtower --follow
# Last 50 lines
docker logs watchtower --tail 50
# Since last hour
docker logs watchtower --since 1h
Notify Without Updating
To receive watchtower docker notifications for available updates without actually restarting containers, enable monitor-only mode globally:
environment:
- WATCHTOWER_MONITOR_ONLY=true # Detect updates, notify, but never restart
- WATCHTOWER_NOTIFICATIONS=slack
- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=https://hooks.slack.com/...
This turns Watchtower into a pure notification system — similar to Diun or What's Up Docker, but with Watchtower's simpler setup.
Frequently Asked Questions
Start Watchtower with the --debug flag and run it in --run-once mode: docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -e WATCHTOWER_NOTIFICATIONS=slack -e WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=... containrrr/watchtower --run-once --debug. You'll see the notification attempt in the log output, and a test message will arrive in Slack.
Not directly — Watchtower only sends notifications when updates occur or fail, not for "no-op" checks. If you need heartbeat-style notifications, use the HTTP API and poll from an external monitoring tool, or check Watchtower's logs via your observability stack.
Yes, via Shoutrrr: WATCHTOWER_NOTIFICATION_URL=teams://tokenA/tokenB/tokenC. Create an Incoming Webhook in Microsoft Teams and use the webhook URL components as the Shoutrrr token. See the Shoutrrr documentation for the exact URL format.