What Changes, What Doesn't

ItemChange 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
ℹ️
Switching to 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

  1. In the Portainer UI, navigate to Stacks and select your Watchtower stack.
  2. Click Editor and change image: containrrr/watchtower to image: nickfedor/watchtower.
  3. Click Update the stack.
  4. 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

Do I need to change any environment variables when migrating?

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.

Do Docker labels on my containers need to change?

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.

Will nickfedor/watchtower restart all my containers when I switch?

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.

Is nickfedor/watchtower the same as nicholas-fedor/watchtower?

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.

AC
Alex Chen
Docker Infrastructure Engineer
Alex has documented the full Watchtower ecosystem including all image variants and migration paths. This guide was written in June 2026 following the containrrr archive to provide a clear, tested migration path for all Watchtower users.