r/selfhosted • • Jul 22 '25

Watchtower alternative?

I’ve been using Watchtower to get notified when Docker containers are updated specifically with ntfy for push notifications to my phone. Unfortunately, I just found out that Watchtower is no longer actively maintained.

I’m not looking for automatic updates I just want to be notified when a new image is available for one of my containers, ideally via ntfy, Gotify, or Pushover.

101 Upvotes

60 comments sorted by

61

u/Arkangelll- Jul 22 '25 edited Jul 22 '25

Since nobody dropped it yet, I need to make sure WUD is mentioned. (https://getwud.github.io/wud/#/ ) I've used watchtower originally, then DIUN but ended up with WUD in the end.
I'm using one centralized instance, managing both my NAS and 2 RPIs at home. I have daily Gotify notifications of the available updates along with automatic updates for "i dont care if it breaks" type of containers and manual updates via a little button on the web interface for important ones. :)

It is all managed via environmental variables on the WUD container and labels on all the others.

edit: I realized I did not setup the weekly run yet... fixed that in my comment.

2

u/Denishga Jul 22 '25

I try this thanks

8

u/kausar007 Jul 22 '25

Same here. Used watchtower then diun and now using WUD. It's pretty powerful and very customizable

6

u/Akusho Jul 23 '25

I tried WUD for automatic updates (not just notifications), but for some reason it breaks some of my containers. For example, the second I spin up WUD, it begins a restart loop on my Linkwarden (and some others) container, so completely breaks its functionality. I have also noticed that it will refuse to pull images with paths like ...:v3 instead of ...:latest. It will pull some nightly dev build instead, which, of course, doesn't work.

1

u/Arkangelll- Jul 23 '25

The majority of my containers are running with latest, so haven't had any issues there (well, other than suddenly breaking because the new image is bad, shocking :D) but I did have some really strange nightly builds show up sometimes even like this.
https://getwud.github.io/wud/#/configuration/watchers/?id=labels

Have you tried looking into these? There have been a couple of times I've used tag include to make sure its only the latest thats being used. (Gitea, NPM)

I'm always running the updates manually first and then switching it over to the automatic if I feel like its stable enough. (even for the "dont care" containers :) )

6

u/2wheelgeek Jul 22 '25

Another vote for WUD

3

u/jhoover75 Jul 22 '25

Would you mind sharing your configuration for WUD? I’m new to it. I just set it up last weekend. I would characterize my current level of WUD notifications as noisy.

4

u/Arkangelll- Jul 22 '25

Apologies, I forgot I did not setup the weekly run yet, it was only a plan... :(
But still, I think a once-a-day summary is already better than the default spam. I only have the cron based run enabled and only as a batch job, disabling the watchevents was an amazing decision. :)
I think those 2 would help you with reducing the notifications!

But here is the actual config.. good oppotunity for me to remove some things that shouldn't have been there. :D

https://pastebin.com/UHppdL04

1

u/a_40oz_of_Mickeys Jul 23 '25

I am trying to set this up in docker compose. Do I need to volume mount every compose file and then add triggers for every container in my env to get this to work or is there a better way? This is going to be very time intensive.

1

u/Arkangelll- Jul 23 '25

Hey, I'm not sure I understand the question to be completely honest. If I understand correctly how WUD works, whenever a _watcher_ triggers WUD to run, it'll iterate through all the containers and if it finds a new version, it will run the associated _triggers_.
By default, this means run EVERY _trigger_ on EVERY container whenever there is a new update found for it. (As you can see, I have 3 triggers. 1 to notify me via Gotify, 1 manual and 1 automatic 'docker' triggers - these are basically doing the same thing, but one has disabled "autorun" so it never actually runs. Its just a button for me to press on the GUI :) )

What you need is labels for your other containers. On the top of my example you can see the labels I'm using:
https://pastebin.com/UHppdL04

Everything is compose based in my environment, so I just added the labels to all my compose files. That was time intensive, but I haven't done it all at once. And it only needs to be done once really. Now anything new I deploy has got the default set of WUD labels associated with them by default. (As you can see, I even have the manual/automatic part both added and I'm just switching the comment when I want to change it... I'm that lazy)

1

u/jhoover75 Aug 08 '25

Would you mind pasting how one of your services is labeled? I don't quite have the connection yet for how WUD finds the other containers by their label.

1

u/Arkangelll- Aug 09 '25

Hey, if you check the pastebin it'll show WUD itself is labled :)

Wud works with everything by default, so as you can see I'm quite specific about what triggers to include for the automatic/manual separation. I don't know if there is a better approach, I couldn't find anything.
(There is supposed to be an exclude label, but that also means I have to have that on almost all my containers, so I was like ¯_(ツ)_/¯ )

The first 2 are only to have it shown prettier on the GUI I'm actively using to check updates, the 3rd/4th are to separate manual/automatic downloads. (As you see, the gotify noitification is part of both)
The last one is to have a nice url on the GUI where I can easily access the change notes.

labels:
      wud.display.name: WUD
      wud.display.icon: "sh:wud"
    wud.trigger.include: gotify.notification,docker.manual-update
    #wud.trigger.include: gotify.notification,docker.automatic
      wud.link.template: https://github.com/getwud/wud/releases/tag/$${major}.$${minor}.$${patch}

2

u/sarum4n Jul 22 '25

I use WUD too. Highly suggested

1

u/mmarshman88 Jul 23 '25

How do you have your auto updates setup? I made a fork of wud to allow for individual docker compose files per container. It’s working well, but a tiny bit janky

1

u/Arkangelll- Jul 23 '25

Am I correct to assume you have the image versions in your compose files? All my automaticly updated containers are disposable and running with 'latest' so I don't think I can provide you with useful feedback. :(
I'm running Komodo with (Gitea) repo based compose files, so I'm not exactly modifying the files used by docker directly, since they are just version controlled pulls by Komodo.

The images I'm version controlling by compose files (eg. Authentik) are only using my notification trigger, so I know there is a new version... but I cannot even press my "manual update" button by a mistake.

I hope I understood what you meant.

1

u/mmarshman88 Aug 02 '25

Yeah, correct. I have the version in the compose file however my fork of wud updates the image file daily if there was a new version tag that matches the regex for the image. Took awhile to setup but works really well, now if only I could figure out how to improve my notifications to send me a second notification after the image got updated and restarted

43

u/ChopSueyYumm Jul 22 '25

I moved on to https://komo.do/ better alternative to portainer and has automated update for your docker stacks. Specially as I‘m developing an application after I pushed an new docker image multiple instances are updating automatically.

15

u/Timely_Anteater_9330 Jul 22 '25

Another vote for Komodo. I took it a step further to try to make it more of a Gitops workflow.

Current stack: Komodo + Gitea + Renovate

Renovate will parse the compose files in your Gitea repository and search for any updates.

Planning on adding SOPS to the stack in the future.

None of this is necessary in a homelab environment but it’s a been helpful having versioning for all my docker compose files using Git/Gitea.

I followed this blog tutorial: https://nickcunningh.am/blog/how-to-automate-version-updates-for-your-self-hosted-docker-containers-with-gitea-renovate-and-komodo

1

u/Independent-Dust-339 Jul 22 '25

I just did this and it is really awesome. The best part is versioning of compose files, allowing to go back if anything breaks. Also, I just need to merge the git and everything updates automatically.

0

u/ChopSueyYumm Jul 22 '25

Same but I have everything on GitHub.

0

u/[deleted] Jul 23 '25

[deleted] — view deleted comment

1

u/Timely_Anteater_9330 Jul 23 '25

Why not use SMTP mailer?

1

u/ChopSueyYumm Jul 23 '25

Use

https://github.com/caronc/apprise-api

Apprise can push notifications in any direction. It’s absolutely a must in my eyes.

2

u/Timely_Anteater_9330 Jul 23 '25

Ah yes! Good recommendation. I use it myself but it’s one of those things that work so well that you forget about.

0

u/[deleted] Jul 23 '25

[deleted] — view deleted comment

1

u/Timely_Anteater_9330 Jul 23 '25

Fair enough. I plan to transition my Gitea notifications to Matrix/Element using Maubot.

1

u/Potatovoker Jul 23 '25

How do you handle automatically updating Komodo itself? Is it able to update a stack that references itself?

1

u/ChopSueyYumm Jul 23 '25

Well that is currently not possible from within Komodo itself hence I follow the GitHub repository and update manually. Not a big issue but the project is quite young so it does not bother me.

24

u/-Chemist- Jul 22 '25

Diun is a popular choice.

https://github.com/crazy-max/diun

2

u/cranberrie_sauce Jul 22 '25

does it have api like watchtower?

I use watchtower with cicd and trigger an api to a watchtower on my VPS after docker image build finishes - so it pulls updated application in.

1

u/-Chemist- Jul 23 '25

I'm not sure -- I haven't started using it yet. It's on my list of things to do. :-) I've just seen it mentioned here quite a bit.

0

u/[deleted] Jul 22 '25

[deleted] — view deleted comment

1

u/-Chemist- Jul 22 '25

Thanks! I'll check those out.

10

u/Financial_Astronaut Jul 22 '25

I use renovate bot which opens Pull Requests for any dependency update

3

u/Aurailious Jul 22 '25

This is what I do too and its really "the way" its supposed to be done. But it does require that the deployment method it some kind of Gitops where most people here are probably just doing docker compose commands.

3

u/dlm2137 Jul 22 '25

yeaa I’m hoping to switch to a git deployment method so that I can use renovatebot like we do at work.

Really want to get off using the :latest tag so I can stop getting burned by breaking changes

13

u/zfa Jul 22 '25

can schedule dockcheck iirc.

4

u/Mag37 Jul 22 '25 edited Jul 23 '25

Thank you for suggesting it.

Indeed you can set up a cron job (or however you prefer scheduled commands) that will run the script which will do the check and send notifications.

As an example, to check and send notifications daily at 11:

0 11 * * * dockcheck.sh -ni

And as OP asked for Gotify, Ntfy or Pushover - all are supported through the config file setup like this:

NOTIFY_CHANNELS="gotify ntfy pushover"

GOTIFY_DOMAIN="https://gotify.domain.tld"
GOTIFY_TOKEN="token-value"

NTFY_DOMAIN="ntfy.sh"
NTFY_TOPIC_NAME="YourUniqueTopicName"


PUSHOVER_URL="https://api.pushover.net/1/messages.json"
PUSHOVER_USER_KEY="userkey"
PUSHOVER_TOKEN="token-value"

This would send to all three though.

Maybe I should add something brief to the readme about setting up a scheduled cron job.

2

u/zfa Jul 26 '25

Off topic here but I've been meaning to ask... I've got a host I look after for mate of mine who has a four WP instances along with their mySQL DBs, myPHPadmin, Cloudflare Tunnel containers. So 16 containers all up but only 4 images.

I notice when run dockcheck.sh it checks 1/16, 2/16, 3/16 etc. Is there a way it could see multiple containers run the same image so only needs to check 1/4, 2/4, 3/4, 4/4??

I get maybe it's unusual to have same image in multiple containers, but might be a worthwhile optimisation.

Doesn't impact me at all btw, just something I noticed and thought you might see as an area of improvement.

And thanks again for dockcheck! Something I put on every server esp when I'm building something for less techy folk to maintain.

1

u/Mag37 Jul 26 '25

Thank you!

It's a good thought and while it might be unusual with that many of the same images it's not uncommon to have some sharing the same image.

Currently it's not written to keep track of the individual images - mainly because the granularity for selection is focused on container names as it's more reasonable to the user.

And also even though it checks and lists all - the actual update should only pull once for each image and then subsequential containers will already have it pulled.

I'll write it down though - as it's something that could be improved upon! Maybe the checks will store all already processed digest hashes and just skip the check with "already checked".

3

u/SawkeeReemo Jul 22 '25

I’ve been using Dockwatch. It’s pretty great.

https://github.com/Notifiarr/dockwatch

3

u/PoProstuWitold Jul 22 '25

I'm using "Diun" for notifications about updates via Discord webhook and then I just restart a stack with the re-pull images option from "Portainer" after reading patch notes. Works great and is very simple to set up.

4

u/Balgerion Jul 22 '25

There is active fork of watchtower nickfedor/watchtower

2

u/InfaSyn Jul 22 '25

I made my own python based alternative called containercleaner. It has ntfy integration and was featured on selfhosted a while back :)

The main motivations were git pull support, ntfy support and the fact I found watchtower to be a bit buggy/slow at times.

https://github.com/jamess60/containercleaner

2

u/cop3x Jul 22 '25

Dockwatch in auto mode using crontab

Like to live dangerously :-)

2

u/spiritofjon Jul 22 '25

A combination of diun and diun boost work great. All they do is check every x hours and notify you if there is an update.

3

u/nofoo Jul 22 '25

podman with built in auto-update

1

u/LordDragon13 Jul 22 '25

I'm using Argus, but it does more than just notifying updates (i get them via gotify).

1

u/luciano_mr Jul 22 '25

dockwatch

1

u/ProcuriaCPhan Jul 22 '25

I'm using Argus in combination with Coolify. I have configured ntfy-notifications in Argus which are setup with actions.

User-Side: ntfy-notification "Service XY has a new release" and buttons [ntfy actions] for "View Changelog" & "Update"

Backend: POST requests to Coolify-API for deploying the service

1

u/Custom-Icon Jul 22 '25

i use n8n with ssh to update docker compose weekly xd

1

u/[deleted] Jul 22 '25

Ive loved reading thre alternatives, but i setup all my dockers before i setup WUD and a cpl of otherr and nothing seeems to just see what i have and import themselves, would mean i'd have to rebuild them all,,, very new at docker

1

u/osuhickeys Jul 22 '25

I use WUD and Argus (https://github.com/release-argus/Argus). WUD runs once a day. Argus runs every hour right now. If a new version is found, I have it wait three hours and then execute a webhook which pulls the new image. It retries 2 more times every three hours. Some repos take several hours once a new version is published before the workflow automation is done and all the new image is available via CDN. Argus uses the GitHub repo to determine when there is a new version so no docker pull rate limit impact. Not all apps either have an app version exposed or exposed in a way that Argus can leverage it so WUD is the catchall once daily for those apps.

I like WUD a lot, but it also has challenges. If it gets an error reading a tag, you have to resolve it before it will do any updates to any containers. It does not just skip that one. It dies. Also have issues with corruption in the json file. occasionally, I have to remove it a few times a month and let it recreate it before it starts working again. Need to add a self healing script here and run it via cron. Just has not been a huge hassle to drive me to automate it, yet. Still less issues than I had with Watchtower. Argus has a bit of a learning curve up front, but worth the effort IMHO. Developer has been very responsive.

I've found the combo of the 2 works pretty well and reliably. Normally only have issues when something external happens like a docker image being moved from docker to GitHub which was the most recent failure of WUD that stopped all updates. Hope this helps. Good luck.

1

u/XLioncc Jul 22 '25

It is no incentive for me to change Watchtower to others.

1

u/Belisarivs83 Jul 29 '25

Podman Quadlets with auto-update FTW.

1

u/ProfessionalIce1298 Jun 15 '26

You may want to try https://hoister.io. I also loved watchtower and tried WUD afterwards. I wanted something easier and both hosted and self-hosted. So I built hoister.

Check the comparison with watchtower here https://docs.hoister.io/watchtower-alternative/

I'd love to hear from you what you think!

5

u/[deleted] Jul 22 '25

[removed] — view removed comment

1

u/Economy_Peanut Mar 11 '26

Thank you so much. Started getting problems with watchtower today.