 {"id":519565,"date":"2025-11-01T11:52:46","date_gmt":"2025-11-01T18:52:46","guid":{"rendered":"https:\/\/jorgep.com\/blog\/?p=519565"},"modified":"2026-04-21T19:45:19","modified_gmt":"2026-04-22T02:45:19","slug":"updating-docker-containers","status":"publish","type":"post","link":"https:\/\/jorgep.com\/blog\/updating-docker-containers\/","title":{"rendered":"Updating Docker Containers"},"content":{"rendered":"<style>.wp-block-kadence-advancedheading.kt-adv-heading519190_b33a00-c9, .wp-block-kadence-advancedheading.kt-adv-heading519190_b33a00-c9[data-kb-block=\"kb-adv-heading519190_b33a00-c9\"]{font-size:var(--global-kb-font-size-sm, 0.9rem);font-style:normal;}.wp-block-kadence-advancedheading.kt-adv-heading519190_b33a00-c9 mark.kt-highlight, .wp-block-kadence-advancedheading.kt-adv-heading519190_b33a00-c9[data-kb-block=\"kb-adv-heading519190_b33a00-c9\"] mark.kt-highlight{font-style:normal;color:#f76a0c;-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.wp-block-kadence-advancedheading.kt-adv-heading519190_b33a00-c9 img.kb-inline-image, .wp-block-kadence-advancedheading.kt-adv-heading519190_b33a00-c9[data-kb-block=\"kb-adv-heading519190_b33a00-c9\"] img.kb-inline-image{width:150px;vertical-align:baseline;}<\/style>\n<p class=\"kt-adv-heading519190_b33a00-c9 wp-block-kadence-advancedheading\" data-kb-block=\"kb-adv-heading519190_b33a00-c9\"><strong>Disclaimer:<\/strong> <strong>I create this content entirely on my own time, and the views expressed here are mine alone (not my employer&#8217;s)<\/strong>. Because I love leveraging new tech, I use AI tools like Gemini, NotebookLM, Claude, Perplexity and others as a &#8220;digital team&#8221; to help research and polish these articles so I can share the best possible insights with you!<\/p>\n\n\n\n<p>You can manage many devices using docker remotely with <strong>Portainer<\/strong>. However Portainer does not have the ability to check if there are updates and actually update containers within Docker. Up until a few months ago, there was a script which I have used for years to do this called: watchtower.   Unfortunately, watchtower is not being maintained any longer, and although it still works, many do not use it because of its inactive status. Are there other choices?<\/p>\n\n\n\n<p>See my related post <a href=\"https:\/\/jorgep.com\/blog\/portainer-agent-on-windows-fixing-lan-access\/\">Portainer Agent on Windows: Fixing LAN Access<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Current Open-Source Alternatives to Watchtower<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>App Name<\/strong><\/td><td><strong>Primary Function<\/strong><\/td><td><strong>Most Recent Activity Date<\/strong><\/td><td><strong>Status<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>Watchtower (Official)<\/strong> (<code>containrrr\/watchtower<\/code>)<\/td><td>Auto-Update (Container)<\/td><td><strong>~2022<\/strong> (Last Major Release)<\/td><td><strong>Inactive<\/strong> (Project considered unmaintained by community members. May have issues with modern Docker API versions.)<\/td><\/tr><tr><td><strong>Watchtower Fork<\/strong> (<code>nickfedor\/watchtower<\/code>)<\/td><td>Auto-Update (Container)<\/td><td><strong>Nov 13, 2025<\/strong> (Recent Commit\/Activity)<\/td><td><strong>Active Fork<\/strong> (Directly addresses the maintenance gap of the original project.)<\/td><\/tr><tr><td><strong>WUD (What&#8217;s Up Docker)<\/strong><\/td><td>Auto-Update &amp; Notify (GUI)<\/td><td><strong>Nov 26, 2025<\/strong> (Recent Commit\/Activity)<\/td><td><strong>Very Active<\/strong> (Modern GUI alternative.)<\/td><\/tr><tr><td><strong>Dockcheck<\/strong> (<code>mag37\/dockcheck<\/code>)<\/td><td>Auto-Update &amp; Notify (CLI)<\/td><td><strong>Oct 6, 2025<\/strong> (v0.7.3 Release)<\/td><td><strong>Very Active<\/strong> (Robust CLI with Prometheus support.)<\/td><\/tr><tr><td><strong>Container Updater<\/strong> (<code>brutaldev\/ContainerUpdater<\/code>)<\/td><td>Auto-Update (CLI)<\/td><td><strong>Last Week<\/strong> (Latest Commit)<\/td><td><strong>Very Active<\/strong> (Non-container-based, focuses on simplicity.)<\/td><\/tr><tr><td><strong>Renovate Bot<\/strong> (<code>renovatebot\/renovate<\/code>)<\/td><td>Notification (GitOps PRs)<\/td><td><strong>Nov 18, 2025<\/strong> (Renovate v42 Update)<\/td><td><strong>Very Active<\/strong> (The GitOps approach to updating dependencies.)<\/td><\/tr><tr><td><strong>Diun<\/strong> (<code>crazy-max\/diun<\/code>)<\/td><td>Notification Only<\/td><td><strong>May 5, 2023<\/strong> (Recent Mention\/Use)<\/td><td><strong>Active\/Stable<\/strong> (Focuses purely on lightweight notifications.)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>The most popular open-source choices that serve as alternatives or successors to the original Watchtower include:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Top Actively Maintained Alternatives<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td><strong>App Name<\/strong><\/td><td><strong>Primary Function<\/strong><\/td><td><strong>Interface<\/strong><\/td><td><strong>Key Advantage<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>What&#8217;s Up Docker (WUD)<\/strong><\/td><td><strong>Auto-Update &amp; Notify<\/strong><\/td><td>Web UI (GUI)<\/td><td>Offers a complete, easy-to-use GUI for monitoring multiple hosts and performing updates with a click.<\/td><\/tr><tr><td><strong>Diun (Docker Image Update Notifier)<\/strong><\/td><td><strong>Notification Only<\/strong><\/td><td>Notification Service<\/td><td>Very lightweight, focuses solely on notifying you via numerous channels, leaving the update to you (safer for complex stacks).<\/td><\/tr><tr><td><strong>Dockcheck<\/strong> <\/td><td><strong>Auto-Update &amp; Notify<\/strong><\/td><td>CLI \/ Scheduled Cron<\/td><td>Excellent CLI tool with interactive mode, update delay features, and Prometheus metrics support.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Honorable mentions: <\/h3>\n\n\n\n<p>These tools go beyond simple image checking and integrate with larger GitOps or management workflows:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Komodo<\/strong> (mbecker20\/komodo)\n<ul class=\"wp-block-list\">\n<li><strong>Focus:<\/strong> It&#8217;s more of a full-stack container manager (like a Portainer alternative) that includes <strong>automated update functionality<\/strong> for your Docker Stacks.<\/li>\n\n\n\n<li><strong>Advantage:<\/strong> Useful if you want a complete management GUI that integrates updates and stack deployment.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Container Updater<\/strong> (brutaldev\/ContainerUpdater)\n<ul class=\"wp-block-list\">\n<li><strong>Focus:<\/strong> A <code>.NET Core Global Tool<\/code> to automate updates. It&#8217;s often run manually or via a script\/cron job.<\/li>\n\n\n\n<li><strong>Advantage:<\/strong> Supports an interactive mode, <strong>remote host connections<\/strong>, and is compatible with existing Watchtower labels. It emphasizes simplicity without running as a Docker container itself.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Renovate Bot<\/strong> (renovatebot\/renovate)\n<ul class=\"wp-block-list\">\n<li><strong>Focus:<\/strong> Not a direct Watchtower replacement, but a modern GitOps approach. It <strong>scans your <code>docker-compose.yml<\/code> files<\/strong> (or other dependency files) in a Git repository.<\/li>\n\n\n\n<li><strong>Advantage:<\/strong> When a new image is found, it automatically <strong>creates a Pull Request (PR)<\/strong> on GitHub\/GitLab with the updated version tag. You merge the PR to update the tag, and your deployment system (like Komodo or a CI\/CD pipeline) then handles the container deployment. This gives you <strong>full version control<\/strong> and approval before deployment.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>nickfedor\/watchtower<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Focus:<\/strong> A direct fork of the original project.<\/li>\n\n\n\n<li><strong>Advantage:<\/strong> This image is often cited by users as a drop-in replacement that has been updated to fix the compatibility issues (specifically, the old Docker API version error) encountered with the official <code>containrrr\/watchtower<\/code> image on modern Docker Engine releases (like v28+).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Key Considerations for Top Docker Update Tools<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Feature<\/strong><\/td><td><strong><a href=\"https:\/\/github.com\/getwud\/wud\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">WUD (What&#8217;s Up Docker)<\/a><\/strong><\/td><td><strong><a href=\"https:\/\/crazymax.dev\/diun\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Diun (Docker Image Update Notifier)<\/a><\/strong><\/td><td><a href=\"https:\/\/github.com\/mag37\/dockcheck\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">d<strong>ockcheck (mag37\/dockcheck)<\/strong><\/a><\/td><td><strong><a href=\"https:\/\/github.com\/nicholas-fedor\/watchtower\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">nickfedor\/watchtower <\/a>(Fork)<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>Primary Function<\/strong><\/td><td>Auto-Update &amp; Notify<\/td><td>Notification Only<\/td><td>Auto-Update &amp; Notify<\/td><td><strong>Auto-Update Only<\/strong><\/td><\/tr><tr><td><strong>Interface<\/strong><\/td><td><strong>Web GUI<\/strong><\/td><td>Notification Service<\/td><td><strong>CLI\/Script-based<\/strong><\/td><td><strong>Background Container<\/strong><\/td><\/tr><tr><td><strong>Automatic Updates<\/strong><\/td><td>Yes, with triggers you define.<\/td><td><strong>No<\/strong>, notifications only.<\/td><td><strong>Yes<\/strong>, with interactive or automatic mode.<\/td><td><strong>Yes, fully automated.<\/strong><\/td><\/tr><tr><td><strong>Update Granularity<\/strong><\/td><td>Full image\/stack update.<\/td><td>None (user performs update).<\/td><td><strong>Selective Updates<\/strong> (choose which container).<\/td><td>All or Selected via Labels\/Names.<\/td><\/tr><tr><td><strong>Key Advantage<\/strong><\/td><td>Easiest-to-use <strong>Web Interface<\/strong>.<\/td><td><strong>Lightweight<\/strong> and safest for production.<\/td><td><strong>Interactive CLI<\/strong> and <strong>Prometheus<\/strong> metrics.<\/td><td><strong>Drop-in replacement<\/strong> for original Watchtower.<\/td><\/tr><tr><td>GitHub Activity Status<\/td><td>Very Active <br>Last Update: Nov 26, 2025<\/td><td><\/td><td>Very Active <br>Last Update: Oct 26, 2025<\/td><td>Very Active <br>Last Update: Nov 13, 2025<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Summary Comparison:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>If you just want Watchtower to work again:<\/strong> Choose the <strong><code>nickfedor\/watchtower<\/code> fork<\/strong>.<\/li>\n\n\n\n<li><strong>If you want a modern Web Dashboard:<\/strong> Choose <strong>WUD<\/strong>.<\/li>\n\n\n\n<li><strong>If you are CLI-focused and want interactive\/selective updates:<\/strong> Choose <strong>Dockcheck<\/strong>.<\/li>\n\n\n\n<li><strong>If you only want a safe, hands-off notification system:<\/strong> Choose <strong>Diun<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>Hope this helps! <\/p>\n\n\n\n<p><\/p>\n\n\n<style>.wp-block-kadence-advancedheading.kt-adv-heading407818_afcbba-c7, .wp-block-kadence-advancedheading.kt-adv-heading407818_afcbba-c7[data-kb-block=\"kb-adv-heading407818_afcbba-c7\"]{font-size:var(--global-kb-font-size-sm, 0.9rem);font-style:normal;}.wp-block-kadence-advancedheading.kt-adv-heading407818_afcbba-c7 mark.kt-highlight, .wp-block-kadence-advancedheading.kt-adv-heading407818_afcbba-c7[data-kb-block=\"kb-adv-heading407818_afcbba-c7\"] mark.kt-highlight{font-style:normal;color:#f76a0c;-webkit-box-decoration-break:clone;box-decoration-break:clone;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.wp-block-kadence-advancedheading.kt-adv-heading407818_afcbba-c7 img.kb-inline-image, .wp-block-kadence-advancedheading.kt-adv-heading407818_afcbba-c7[data-kb-block=\"kb-adv-heading407818_afcbba-c7\"] img.kb-inline-image{width:150px;vertical-align:baseline;}<\/style>\n<p class=\"kt-adv-heading407818_afcbba-c7 wp-block-kadence-advancedheading\" data-kb-block=\"kb-adv-heading407818_afcbba-c7\">Have questions, ideas to share, or just want to connect? I\u2019d love to hear from you! Check out my <a href=\"https:\/\/jorgep.com\/blog\/about\/\">About Page<\/a> to learn more about me or connect with me.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You can manage many devices using docker remotely with Portainer. However Portainer does not have the ability to check if there are updates and actually update containers within Docker. Up until a few months ago, there was a script which I have used for years to do this called: watchtower. Unfortunately, watchtower is not being&#8230;<\/p>\n","protected":false},"author":2,"featured_media":519237,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","ngg_post_thumbnail":0,"episode_type":"","audio_file":"","podmotor_file_id":"","podmotor_episode_id":"","cover_image":"","cover_image_id":"","duration":"","filesize":"","filesize_raw":"","date_recorded":"","explicit":"","block":"","itunes_episode_number":"","itunes_title":"","itunes_season_number":"","itunes_episode_type":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[441,446],"tags":[431,919],"class_list":["post-519565","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech-talk","category-tips-tools-resources","tag-devops","tag-docker"],"taxonomy_info":{"category":[{"value":441,"label":"Tech Talk"},{"value":446,"label":"Tips, Tools &amp; Resources"}],"post_tag":[{"value":431,"label":"DevOps"},{"value":919,"label":"Docker"}]},"featured_image_src_large":["https:\/\/jorgep.com\/blog\/wp-content\/uploads\/Featured-Helpful-Hints-Series.png",930,330,false],"author_info":{"display_name":"Jorge Pereira","author_link":"https:\/\/jorgep.com\/blog\/author\/jorge\/"},"comment_info":0,"category_info":[{"term_id":441,"name":"Tech Talk","slug":"tech-talk","term_group":0,"term_taxonomy_id":451,"taxonomy":"category","description":"","parent":0,"count":709,"filter":"raw","cat_ID":441,"category_count":709,"category_description":"","cat_name":"Tech Talk","category_nicename":"tech-talk","category_parent":0},{"term_id":446,"name":"Tips, Tools &amp; Resources","slug":"tips-tools-resources","term_group":0,"term_taxonomy_id":456,"taxonomy":"category","description":"","parent":0,"count":93,"filter":"raw","cat_ID":446,"category_count":93,"category_description":"","cat_name":"Tips, Tools &amp; Resources","category_nicename":"tips-tools-resources","category_parent":0}],"tag_info":[{"term_id":431,"name":"DevOps","slug":"devops","term_group":0,"term_taxonomy_id":441,"taxonomy":"post_tag","description":"","parent":0,"count":6,"filter":"raw"},{"term_id":919,"name":"Docker","slug":"docker","term_group":0,"term_taxonomy_id":929,"taxonomy":"post_tag","description":"","parent":0,"count":14,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/posts\/519565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/comments?post=519565"}],"version-history":[{"count":11,"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/posts\/519565\/revisions"}],"predecessor-version":[{"id":519580,"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/posts\/519565\/revisions\/519580"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/media\/519237"}],"wp:attachment":[{"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/media?parent=519565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/categories?post=519565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jorgep.com\/blog\/wp-json\/wp\/v2\/tags?post=519565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}