Fixing Watchtower: Solving the "Client Version 1.25 is Too Old" Docker Error

If you use Watchtower to keep your Docker containers updated automatically, you might have recently noticed that it has silently stopped working. If you check your logs, you’re likely seeing an error about the client version being "too old."

Fixing Watchtower: Solving the "Client Version 1.25 is Too Old" Docker Error

If you use Watchtower to keep your Docker containers updated automatically, you might have recently noticed that it has silently stopped working. If you check your logs, you’re likely seeing an error about the client version being "too old."

I ran into this issue after a recent Docker update to version 29, and here is how I fixed it by migrating from the abandoned containerrr/watchtower image to the actively maintained nickfedor/watchtower.

The Symptom: Watchtower Stops Updating

After updating my Docker hosts to Docker Engine v29, Watchtower completely failed to start. It wasn't updating my containers, and it wasn't updating itself.

Running docker logs --follow [watchtower_container_name] revealed the following fatal error:

time="2025-12-01T10:00:00Z" level=fatal msg="Error response from daemon: client version 1.25 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version."

The Cause: An Abandoned Project

The root cause is simple but unfortunate: the official containerrr/watchtower repository has not been updated in over two years.

Docker recently deprecated older API versions to improve security and performance. The original Watchtower image was built using an older Docker client library (v1.25) that is no longer supported by modern Docker engines as of Docker v29 (which now require v1.44+).

Because the project is unmaintained, there is no official patch coming to fix this compatibility issue.

The Solution: Migrating to nickfedor/watchtower

Fortunately, Nick Fedor has forked the project and is actively maintaining it. His fork updates the internal dependencies to work with modern Docker APIs while keeping the exact same functionality and configuration options as the original.

Details: nickfedor/watchtower

Here is how you can migrate in less than a minute.

If you are using docker-compose.yml, you only need to change the image line.

Old Configuration (Broken):

services:
  watchtower:
    image: containerrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

New Configuration (Working):

services:
  watchtower:
    image: nickfedor/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

After updating the file, pull the new image and recreate the container:

docker-compose pull
docker-compose up -d

Method 2: Docker Run Command

If you run Watchtower via the CLI, simply swap the image name in your run command:

# Stop and remove the old container
docker stop watchtower
docker rm watchtower

# Run the new maintained fork
docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  nickfedor/watchtower

Verification

Once the new container is running, check the logs to ensure it is communicating with the Docker socket correctly:

docker logs --follow watchtower

You should see the familiar startup message, but this time without the fatal API error:

time="2025-12-03T21:00:00Z" level=info msg="Watchtower 1.7.1"
time="2025-12-03T21:00:00Z" level=info msg="Using no notifications"
time="2025-12-03T21:00:00Z" level=info msg="Checking all containers (except explicitly disabled) every 24 hours"

Bonus: Watchtower Config

It would not surprise me if many people out there got started with watchtower by simply running the container with no environment variables. While this may work fine for many, there are likely some out there who would rather have more control over how Watchtower functions. Here are some environment variables that you may wish to look at for your Watchtower deployment:

TZ Set watchtower's timezone for logging and execution

WATCHTOWER_SCHEDULE Use a cron string to control when Watchtower checks for container updates.

WATCHTOWER_NO_RESTART This may be critical for some depending on your requirements. Pull the new image but do not restart the container.

WATCHTOWER_CLEANUP Cleans up old images after an update.

There are command line equivalents for most environment variables for those who prefer the docker command over compose.

As best I can tell most, if not all, of the environment variables from containerrr/watchtower have been brought over to Nick's fork. Check the website link above for more details on other enironment variables.

Conclusion

It is always a risk relying on Docker images that haven't seen a commit in years. While containerrr/watchtower served us well for a long time, it's time to move on. The nickfedor fork is a drop-in replacement that requires no config changes and gets your automated updates running again instantly.

Have you run into this issue? Did you find another watchtower image out there that you prefer? Need help with watchtower? Leave a comment below!

Read more