WatchTower: The Datadog Agent Alternative That Just Works
The Problem with datadog/agent
Datadog’s Docker agent is one of the most popular monitoring images on Docker Hub with 1 billion+ pulls. But it has fundamental problems:
1. Vendor Lock-in
You cannot use the Datadog agent without an API key. Your data goes to Datadog’s cloud. Period. There’s no self-hosted mode.
2. No Built-in Dashboard
The agent only collects metrics. You still need Grafana (or Datadog’s expensive cloud dashboard) to visualize them.
3. Complex Configuration
docker run -d --name datadog-agent \
-e DD_API_KEY=your-key \
-e DD_SITE=datadoghq.com \
-e DD_LOGS_ENABLED=true \
-e DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true \
-e DD_APM_ENABLED=true \
-e DD_PROCESS_AGENT_ENABLED=true \
-e DD_CONTAINER_EXCLUDE="name:datadog-agent" \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc:/host/proc:ro \
-v /sys/fs/cgroup:/host/sys/fs/cgroup:ro \
datadog/agent:latest
That’s 7 environment variables just to get basic monitoring working.
4. Heavy Resource Usage
The Datadog agent image is 600MB+ and uses 200-400MB of RAM per host.
5. Known Bugs
- Container collection forced on even when disabled
- Architecture mismatches (linux/amd64 missing from tags)
- Docker label configuration bugs
- Log port specification issues
Enter WatchTower
WatchTower is a drop-in replacement that fixes all of these problems.
One Command Setup
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 -p 9090:9090 \
ghcr.io/irfancode/watchtower:latest
That’s it. Zero environment variables. Open http://localhost:3000 and you have a live dashboard.
What You Get
Built-in Dashboard:
- Real-time container CPU, memory, network usage
- Container status (running/stopped)
- Restart counts
- Auto-refresh every 15 seconds
Prometheus Metrics:
container_cpu_percent— Per-container CPU usagecontainer_memory_mb— Per-container memory usagecontainer_network_rx_bytes/container_network_tx_bytes— Network I/Ocontainer_status— Running (1) or stopped (0)total_containers/running_containers— Cluster overview
Comparison
| Feature | Datadog Agent | WatchTower |
|---|---|---|
| Setup | 7+ env vars | Zero config |
| Dashboard | Requires Grafana | Built-in |
| API Key | Required | Not needed |
| Data Location | Datadog Cloud | Your server |
| Image Size | 600MB+ | ~150MB |
| Memory Usage | 200-400MB | ~50MB |
| Prometheus Export | Yes | Yes |
| Cost | $15-23/host/month | Free |
When to Use WatchTower
- You want container monitoring without vendor lock-in
- You need a quick dashboard without setting up Grafana
- You’re running Docker on a single host or small cluster
- You want Prometheus-compatible metrics
- You’re cost-conscious
When to Stick with Datadog
- You need APM (distributed tracing)
- You need log management at massive scale
- You have a dedicated budget and want vendor SLAs
- You need compliance certifications (SOC2, HIPAA)
Getting Started
# Basic usage
docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 -p 9090:9090 \
ghcr.io/irfancode/watchtower:latest
# With custom settings
docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 -p 9090:9090 \
-e SCRAPE_INTERVAL=10s \
-e CONTAINER_FILTER=running \
ghcr.io/irfancode/watchtower:latest
Docker Compose
services:
watchtower:
image: ghcr.io/irfancode/watchtower:latest
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- "3000:3000"
- "9090:9090"
environment:
- SCRAPE_INTERVAL=10s
restart: unless-stopped
The Bottom Line
WatchTower isn’t trying to replace every feature of Datadog. It’s trying to replace the 80% of teams who just need to know: “Are my containers healthy, and how much resources are they using?”
For that use case, it’s simpler, cheaper, and more private than the alternative.
GitHub: github.com/irfancode/docker-toolkit/watchtower License: MIT