What Changes, What Doesn't
| Item | Change Required? |
|---|---|
| Image name | ✓ Change to nickfedor/watchtower |
All WATCHTOWER_* environment variables | ✓ No change — 100% identical |
| Docker labels on monitored containers | ✓ No change — all labels work identically |
Volume mounts (/var/run/docker.sock) | ✓ No change |
| Port mappings (HTTP API) | ✓ No change |
| Shoutrrr notification URLs | ✓ No change |
| Docker Swarm global service config | ✓ No change beyond image name |
nickfedor/watchtower will not trigger unexpected restarts on your other containers. Watchtower only restarts a container when it detects a newer image digest on the next scheduled poll. Your monitored containers are unaffected by the Watchtower image swap itself.Method 1 — Docker Compose (Most Common)
This covers the typical setup where Watchtower is defined in a docker-compose.yml file.
Step 1: Open your docker-compose.yml and change the image line:
# Before — archived image
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
WATCHTOWER_CLEANUP: "true"
WATCHTOWER_SCHEDULE: "0 0 4 * * *"
restart: unless-stopped
# After — active fork (only the image line changes)
services:
watchtower:
image: nickfedor/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
WATCHTOWER_CLEANUP: "true"
WATCHTOWER_SCHEDULE: "0 0 4 * * *"
restart: unless-stopped
Step 2: Pull the new image and restart the container:
docker compose pull watchtower
docker compose up -d watchtower
Step 3: Verify the new container is running:
docker compose logs watchtower
You should see startup logs from the nickfedor fork. The version string will differ from the containrrr v1.7.1 if the fork has issued newer releases.
Method 2 — docker run
If you run Watchtower with a plain docker run command, update the image name and recreate the container:
# Step 1: Stop and remove the existing containrrr container
docker stop watchtower
docker rm watchtower
# Step 2: Pull the nickfedor fork
docker pull nickfedor/watchtower
# Step 3: Start with the new image (all flags remain the same)
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_CLEANUP=true \
-e WATCHTOWER_SCHEDULE="0 0 4 * * *" \
nickfedor/watchtower
Replace the environment variables and flags with your existing configuration — only the image name at the end changes.
Method 3 — Docker Swarm
If Watchtower runs as a global service in a Docker Swarm cluster:
# Update the service image — Swarm handles rolling restart automatically
docker service update \
--image nickfedor/watchtower \
watchtower
Or, if you use a Swarm stack file, update the image: line and redeploy:
docker stack deploy -c watchtower-stack.yml watchtower
Method 4 — Portainer Stack
- In the Portainer UI, navigate to Stacks and select your Watchtower stack.
- Click Editor and change
image: containrrr/watchtowertoimage: nickfedor/watchtower. - Click Update the stack.
- Portainer will pull the new image and restart the Watchtower container automatically.
Verifying the Migration
After the migration, confirm Watchtower is running correctly:
# Check the running container
docker ps | grep watchtower
# Check logs for startup confirmation
docker logs watchtower --tail 20
# Trigger a manual run-once check (optional)
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
nickfedor/watchtower --run-once --debug
Look for Checked X container(s) in the run-once output — this confirms the fork is reading your running containers correctly.
Common Migration Issues
Issue: Old containrrr image is still running after compose up
Make sure you ran docker compose pull watchtower before docker compose up -d. If the local cache still has the containrrr image, Docker Compose may not pull the new one automatically without the explicit pull step.
Issue: "no such image" error after changing image name
Run docker pull nickfedor/watchtower explicitly, then retry. Check that your internet connection can reach Docker Hub.
Issue: Container keeps restarting after migration
Check docker logs watchtower for the error. Common causes after a fork switch are missing Docker socket (check the volume mount) or an environment variable typo introduced during the edit. Compare your configuration against the working examples above.
Frequently Asked Questions
No. Every WATCHTOWER_* environment variable is identical in the nickfedor fork. WATCHTOWER_CLEANUP, WATCHTOWER_SCHEDULE, WATCHTOWER_POLL_INTERVAL, WATCHTOWER_NOTIFICATIONS, WATCHTOWER_LABEL_ENABLE — all work exactly the same. Only the image name changes.
No. All Watchtower labels (com.centurylinklabs.watchtower.enable, com.centurylinklabs.watchtower.stop-signal, com.centurylinklabs.watchtower.monitor-only, etc.) work identically in the nickfedor fork. No container labels need updating.
No. Watchtower only restarts a container when it detects a newer image digest. Switching the Watchtower image itself does not trigger restarts on your other containers. They will be checked at the next scheduled poll and only updated if a newer image exists on the registry.
Yes — they are the same image published under two Docker Hub namespaces. nickfedor/watchtower and nicholas-fedor/watchtower are equivalent. Either can be used interchangeably.