Watchtower automatically updates your Docker containers the moment a new image lands on Docker Hub — no cron jobs, no manual docker pull, full support for Docker Compose and Docker Swarm. This site is an independent, free guide to setting it up and configuring it.
containrrr/watchtower project was archived on December 17, 2025 (maintainers cited lost time/interest, not a security issue — details here). nickfedor/watchtower appears to be the most actively maintained fork, though it isn't an officially endorsed successor. All documentation below applies to both images — they are API-compatible.
Watchtower Docker is an open-source tool that automatically monitors your running Docker containers and updates them the moment a new image is available on Docker Hub or any private registry. Originally developed by the containrrr organization (containrrr/watchtower), it is now actively maintained as nickfedor/watchtower.
When Docker Watchtower is running, it connects to the Docker daemon via the Docker socket, polls your configured registries at a scheduled interval, and — when a newer image digest is detected — pulls the update, gracefully stops the old container, and restarts it with the exact same configuration. That is Watchtower for Docker in a single sentence: hands-free Docker container lifecycle management.
Whether you run a single Docker Compose stack on a VPS or a full Docker Swarm cluster, Watchtower keeps every container current without manual intervention — no cron jobs, no shell scripts, no downtime procedures.
Monitors all running containers by default, or only containers you opt-in via Docker labels.
Fetches the latest image from Docker Hub or any private registry on a configurable schedule.
Replaces old containers with updated ones — volumes, env vars, networks, and ports are all preserved.
Set WATCHTOWER_CLEANUP=true to automatically remove old Docker images and free disk space.
Six real capabilities of the open-source tool — no dashboard, no SaaS layer, just a container that watches your other containers.
Watchtower polls Docker Hub or any private registry on a schedule you set, and pulls a new image the moment it detects a newer digest for a container you're running.
Runs as a single container alongside your stack — works identically whether you're on plain docker run, Docker Compose, or a Swarm global service.
Use a 6-field cron expression via WATCHTOWER_SCHEDULE, or a simple poll interval via WATCHTOWER_POLL_INTERVAL — your call.
Replaces the running container with the updated one, preserving volumes, environment variables, networks, and port mappings exactly as they were.
Get notified on Slack, Discord, Telegram, email, or any generic webhook when Watchtower updates a container — powered by the Shoutrrr notification library.
Set WATCHTOWER_CLEANUP=true and Watchtower removes the old image after a successful update, so disk usage doesn't creep up over time.
Three simple steps — no dashboard signup, just a Docker image.
Run the Watchtower image with a single command — pulled directly from Docker Hub, no configuration files needed to get started. Supports Docker Compose and Docker Swarm out of the box. (containrrr/watchtower is archived but still runs; nickfedor/watchtower is the actively maintained fork — see our archive & migration guide.)
Use our Docker Compose example to add Watchtower as a service in your docker-compose.yml. Enable WATCHTOWER_CLEANUP=true to automatically remove old Docker images after each update. Works identically with Docker Swarm deployments.
Watchtower polls Docker Hub (or your private registry) on a configurable schedule, pulls the latest Docker image for each container, and performs a zero-downtime restart. Your infrastructure is always running the freshest code — no manual docker pull ever again.
Install Watchtower using Docker Run, a Docker Compose example, or deploy across a Docker Swarm cluster — examples below use containrrr/watchtower, swap in nickfedor/watchtower if you want the actively maintained fork.
The fastest way to get started. This single command pulls the official containrrr/watchtower Docker image from Docker Hub and starts monitoring all running containers. Watchtower will poll for new images every 24 hours by default and perform a graceful restart when updates are found.
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
Add Watchtower as a service inside your existing docker-compose.yml. Setting WATCHTOWER_CLEANUP=true tells Watchtower to automatically remove old Docker images after each container update — keeping your host clean and freeing disk space. Adjust WATCHTOWER_POLL_INTERVAL (in seconds) to control how often Watchtower checks Docker Hub.
version: "3"
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_POLL_INTERVAL=300
- WATCHTOWER_NOTIFICATIONS=slack
- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=https://hooks.slack.com/...
Deploy Watchtower across an entire Docker Swarm cluster with one command. Running as a global service ensures every node in your Swarm automatically keeps its containers updated from Docker Hub — no per-node configuration required. Ideal for production multi-host environments.
docker service create \
--name watchtower \
--mode global \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--env WATCHTOWER_CLEANUP=true \
containrrr/watchtower
Looking for a Watchtower Docker alternative or replacement? Here's how Watchtower stacks up against What's Up Docker, Portainer, and manual workflows.
| Feature |
Watchtower
Auto-updates (not just notify)
|
What's Up Docker | Portainer | Manual Updates |
|---|---|---|---|---|
| Auto-update Docker containers | ✓ Full | ◑ Notify only | ◑ Manual trigger | ✗ None |
| Docker Compose support | ✓ Native | ✓ Yes | ✓ Yes | ✗ Manual |
| Docker Swarm support | ✓ Native | ✗ Limited | ✓ Yes | ✗ None |
| Watchtower cleanup (old images) | ✓ WATCHTOWER_CLEANUP=true |
✗ No | ◑ Manual | ✗ No |
| Notifications (Slack, Discord, email, webhook via Shoutrrr) | ✓ Yes | ✓ Yes | ◑ Limited | ✗ No |
| Web UI / dashboard | ✗ CLI/logs only | ◑ Basic | ✓ Yes | ✗ No |
| Private registry support | ✓ Yes | ✓ Yes | ✓ Yes | ◑ Manual |
| Setup time | ✓ < 5 minutes | ◑ ~15 minutes | ◑ ~30 minutes | ✗ Ongoing |
| Free tier | ✓ Yes — forever | ✓ Open source | ◑ Community edition | ✓ Free (your time) |
What's Up Docker is a solid notification tool — but by default it only tells you about new images, it doesn't pull and restart them for you. Watchtower does the full loop automatically: detect, pull, restart, and optionally clean up old images. The tradeoff is that Watchtower has no web dashboard — it's configuration- and log-driven, not something you click around in.
Complete documentation for every Watchtower Docker use case — from first install to advanced multi-host deployments.
Step-by-step install guide for Docker Run, Docker Compose, and Swarm. All platforms covered.
Every WATCHTOWER_* variable documented with defaults, examples, and production configs.
Fix unauthorized errors, connection issues, containers not updating, and keeps-restarting bugs.
Compare Watchtower vs Diun, What's Up Docker, Ouroboros, and Portainer side by side.
Auto-update n8n, Ollama, Vaultwarden, Plex, Jellyfin and more on your homelab.
28 in-depth articles covering every Watchtower Docker topic — platform guides, configuration, advanced usage.
Watchtower Docker is an open-source container automation tool that monitors running Docker containers and automatically updates them when newer images are available on Docker Hub or a private registry. It is developed by the containrrr organization and distributed as containrrr/watchtower on Docker Hub. Watchtower connects to the Docker daemon, polls container registries on a schedule, pulls updated images, and gracefully restarts containers — preserving all volumes, environment variables, and network settings.
Watchtower for Docker is a container lifecycle manager that automates Docker image updates. When a new image tag or digest is detected, Watchtower: (1) pulls the updated Docker image from Docker Hub or your registry; (2) stops the running container gracefully; (3) starts a new container using the updated image with the same runtime parameters; and (4) optionally removes the old image (WATCHTOWER_CLEANUP=true). It can send notifications via Slack, email, or webhooks and can be scoped to specific containers using Docker labels.
Watchtower updates Docker containers in four automatic steps: it polls your container registry for a newer image digest; pulls the new Docker image when detected; gracefully stops the existing container with a configurable stop timeout; then starts a replacement container using the updated image while preserving all original parameters — volumes, env vars, ports, networks, labels, and restart policy. The process typically completes in seconds with no manual commands required.
In Docker Compose, Watchtower is added as an additional service inside your docker-compose.yml. It runs alongside your application containers, mounts the Docker socket, and automatically updates every other service in the Compose stack. You configure it with environment variables such as WATCHTOWER_CLEANUP=true, WATCHTOWER_POLL_INTERVAL, and WATCHTOWER_NOTIFICATIONS. This is the most common production deployment pattern for Watchtower Docker Compose setups.
The purpose of Watchtower Docker is to eliminate the manual work of keeping Docker containers up to date. Without Watchtower, keeping containers current requires logging into each host, running docker pull, stopping the old container, and restarting with the new image — repeated for every container, every time. Watchtower fully automates this cycle, ensuring every Docker container always runs the latest image version with zero human intervention. It is especially valuable in homelab setups, self-hosted application stacks, and small-to-medium production environments.
Most people are up and running in under 5 minutes: pull the image, mount the Docker socket, and Watchtower starts monitoring your containers immediately with sane defaults (24-hour poll interval). No signup, no agent installer, no dashboard to configure — see the install section above for copy-paste commands.
No. Watchtower talks directly to the Docker Engine socket and has no Kubernetes support — pods, Deployments, and Helm charts are out of scope. If you're on Kubernetes and want automated image updates, look at Keel or Flux/ArgoCD image-update automation instead.
Yes. Watchtower reads the same Docker credential store your host already uses, so if docker pull works against your private registry, Watchtower can poll it too. See our environment variables reference for registry auth options.
Mounting /var/run/docker.sock gives a container effective root access to the host — that's true of Watchtower or any tool that needs it. Use the official image, pin a specific version instead of :latest, and review the source before running it in a sensitive environment, same as you would for any image with socket access.
No — Watchtower is configuration- and log-driven, with an optional HTTP API for triggering updates on demand. If you want a clickable UI for container management alongside auto-updates, pair it with Portainer.
containrrr/watchtower is the official Watchtower Docker image hosted on Docker Hub. It is maintained by the containrrr organization and is the standard way to install Watchtower on any Docker host. You can pull it with docker pull containrrr/watchtower or reference it directly in your Docker Compose file.
Set the environment variable WATCHTOWER_CLEANUP=true in your Docker Compose file. When Watchtower updates a container, it will automatically remove the old Docker image from the host after the new one is running — preventing disk space from filling up over time. This is one of the most popular configuration options for production Docker Compose deployments.
Yes. Watchtower runs natively on Docker Swarm. Deploy it as a global service so it runs on every Swarm node and keeps all containers up to date cluster-wide. Mount the Docker socket via bind mount and set WATCHTOWER_CLEANUP=true to keep your Swarm nodes clean automatically.
Watchtower goes far beyond What's Up Docker. While What's Up Docker is a Watchtower alternative focused purely on sending notifications about available image updates, Watchtower actually performs the updates — pulling the new Docker image from Docker Hub, stopping the old container, and restarting with the updated image. Watchtower is the more complete Docker container management solution for teams who want automation, not just alerts.
Mount your Docker config file (~/.docker/config.json) into the Watchtower container and it will automatically use your registry credentials. This works for AWS ECR, Google Container Registry, GitHub Container Registry, and any private Docker registry. No extra configuration needed — Watchtower reads the standard Docker authentication file.
The fastest way to install Watchtower Docker is a single docker run command: docker run -d --name watchtower --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock -e WATCHTOWER_CLEANUP=true containrrr/watchtower. This pulls the official containrrr/watchtower image and starts monitoring all running containers immediately. For Docker Compose, add Watchtower as a service in your docker-compose.yml. Watchtower works identically on Linux, macOS Docker Desktop, Windows Docker Desktop, Synology, Unraid, Proxmox, Raspberry Pi, and TrueNAS SCALE.
Using Watchtower Docker is three steps: (1) Run Watchtower alongside your existing containers, mounting the Docker socket; (2) Configure your update schedule via WATCHTOWER_POLL_INTERVAL (seconds) or WATCHTOWER_SCHEDULE (6-field cron); (3) Optionally set WATCHTOWER_CLEANUP=true and a notification URL. Watchtower runs silently in the background from that point — every container on the host is checked and updated automatically. Check docker logs watchtower to see what it's doing.
The original containrrr/watchtower project was archived on December 17, 2025. The GitHub repository is now read-only — no new releases, bug fixes, or security patches will be issued by the containrrr organization. The existing image still works for current Docker versions, but running an unmaintained image carries long-term risk as the Docker API evolves.
The actively maintained replacement is nickfedor/watchtower (also published as nicholas-fedor/watchtower), a community fork maintained by Nicholas Fedor with full API compatibility and continued releases. If you are starting a new deployment or want continued security support, migrate to the nickfedor fork. See also: What happened to Watchtower and what to do next.
Watchtower Docker is widely used in production environments, but with a few considerations: (1) It requires the Docker socket mount, which is equivalent to root access on the host — use a socket proxy for hardened environments; (2) Auto-updates can introduce breaking changes from upstream images — use label-based opt-in (WATCHTOWER_LABEL_ENABLE=true) for critical services; (3) For databases (PostgreSQL, MySQL), always exclude them from auto-updates. For homelab, self-hosted apps, and non-critical production services, Watchtower with WATCHTOWER_CLEANUP=true and daily scheduling is the recommended approach.
Watchtower is free and open source. Grab a working Compose file and you're running in minutes.
No signup, no account, no cost — it's just a Docker image