剪藏#剪藏#各种折腾

Docker容器手动更新管理利器docker-updater

2026 年 6 月 4 日1 分钟
分享Twitter / XTelegram微博

简介

什么是 docker-updater ?

docker-updater 是一个开源的、自托管的轻量级 Web UI,用于管理 Docker 容器的更新。与 Watchtower 一发布新镜像就自动拉取并重启容器不同,docker-updater 按计划轮询镜像仓库,向用户展示可用的更新,由用户决定何时(甚至是否)更新每个容器。在更新前还可以查看 GitHub 上的发布说明。

主要特点

  • 镜像仓库轮询:通过 Docker Registry v2 manifest APIHEAD 请求 + Docker-Content-Digest 响应头)对比本地镜像摘要与仓库摘要,无需实际拉取镜像

  • 多仓库支持:支持 Docker HubGHCRghcr.io)、LinuxServerlscr.io)以及任何实现了 Bearer token 挑战的镜像仓库

  • 单容器精细控制:可逐个更新、延期 7/14/30/90 天或无限期延期,也可随时取消延期

  • 批量更新:一次选择多个容器批量更新

  • 更新日志查看器:对于发布 org.opencontainers.image.source 标签的镜像,可获取其 GitHub 仓库最近 5Release

  • 实时更新日志:流式日志弹窗实时显示拉取进度和容器重建状态,刷新页面也能自动重连

  • 推送通知:首次运行自动生成私有的 ntfy 主题;也可使用自己的 Apprise URLntfyPushoverDiscordSlack 等)

  • GitHub 通知(可选):可选的 Webhook 端点接收任意仓库的 issuePRstarpushrelease 事件并转发为推送通知

  • 定时检查:按配置的时间和时区每日定时检查;通知仅在定时检查时触发,启动和手动检查不发通知

  • 安全重建:使用 Python Docker SDKWatchtower 模式)重建容器,保留所有原始配置:卷、端口、环境变量、网络、重启策略、capabilities

  • 跳过本地构建镜像:没有 RepoDigests 的容器(本地 Dockerfile 构建)会被自动忽略

  • 持久化状态:更新历史、延期决定和最后检查时间戳在容器重启后仍然保留

  • 深色 UI:标签式仪表板分为 Updates / Deferred / Up to Date / Unchecked / All

应用场景

  • 家庭服务器用户:群晖、UnraidNAS 用户希望集中管理几十个 Docker 容器的更新,但不希望被自动重启打断

  • 生产环境运维:需要在更新前评估每个容器的影响,避免 Watchtower 式自动更新带来的意外停机

  • 多镜像仓库用户:同时使用 Docker HubGHCRLinuxServer 等多个镜像源的用户,希望统一管理

  • GitHub 项目维护者:通过 Webhook 接收自己维护的项目的 issuePRstarrelease 等事件推送

  • 谨慎型用户:每次更新前想先看 GitHub ReleaseChangelog 确认是否有破坏性变更

Notion image

docker-updater 是一个把"是否更新"的决定权完全交还给用户的 Docker 更新管理工具,填补了 Watchtower 全自动更新和手动 docker pull 之间的空白。

安装

在群晖上以 Docker 方式安装。

该项目为单容器项目,镜像托管在 ghcr.io,所以只支持 docker clidocker-compose 两种安装方式。

本文写作时, latest 版本对应为 sha-c5a2cdc

Notion image

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

JAVASCRIPT
# 新建文件夹 docker-updater 和 子目录
mkdir -p /volume1/docker/docker-updater/data

# 进入 docker-updater 目录
cd /volume1/docker/docker-updater

# 运行容器
docker run -d \
  --name=docker-updater \
  --restart=unless-stopped \
  -p 9292:9090 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $(pwd)/data:/app/data \
  -e CHECK_TIME=03:00 \
  -e TIMEZONE=Asia/Shanghai \
  -e DOCKER_HOST=unix:///var/run/docker.sock \
  ghcr.io/liquidguru/docker-updater:latest

环境变量说明

CHECK_TIME 每日定时检查的时间,格式 HH:MM,默认 03:00
TIMEZONE 定时检查使用的时区,默认 Australia/Melbourne
NOTIFY_URL 推送通知的 Apprise URL,可选,不填则自动生成私有 ntfy 主题
DOCKER_HOST Docker socket 路径,默认 unix:///var/run/docker.sock

  • CHECK_TIME 用于设定每天定时检查更新的时间,通知只在定时检查时触发

  • TIMEZONE 时区设置,例如 Asia/Shanghai

  • NOTIFY_URL 推荐使用 ntfy 私有主题,格式如 ntfy://ntfy.sh/your-private-topic;不设置时会自动生成随机主题并显示在仪表板中。

  • DOCKER_HOST 一般无需修改,保持默认即可。

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

JAVASCRIPT
version'3.8'

services:
  docker-updater:
    image: ghcr.io/liquidguru/docker-updater:latest
    container_name: docker-updater
    restart: unless-stopped
    ports:
      - "9292:9090"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock#  Docker 守护进程通信
      - ./data:/app/data# 存放状态数据
    environment:
      - CHECK_TIME=03:00# 每日定时检查时间
      - TIMEZONE=Asia/Shanghai# 时区
      - NOTIFY_URL=    # optional: ntfy://ntfy.sh/your-topic or any Apprise URL
      - DOCKER_HOST=unix:///var/run/docker.sock# Docker socket 路径

然后通过 SSH 登录到您的群晖,执行下面的命令:

JAVASCRIPT
# 新建文件夹 docker-updater 和 子目录
mkdir -p /volume1/docker/docker-updater/data

# 进入 docker-updater 目录
cd /volume1/docker/docker-updater

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

Notion image

运行

在浏览器中访问 http://<群晖IP>:9292 即可进入 Web 界面

Notion image

稍等一会儿,进入 Updates 标签页查看有可用更新的容器

Notion image

在需要升级的镜像后面点 update 按钮手动触发更新,或先点 What's new? 查看 GitHub Release 说明

Notion image

会看到升级日志

Notion image

如果遇到错误,一般情况下应该是网络问题

Notion image

无论成功还是失败,都有记录

Notion image

如果确认网络没问题,可以再次尝试

Notion image

如果希望接收推送通知:

  • 不设置 NOTIFY_URL:首次运行后仪表板顶部会出现绿色横幅,显示自动生成的私有 ntfy 主题,点击 Copy 复制后在手机 ntfy APP 中订阅即可

  • 自定义 NOTIFY_URL:使用任意 Apprise 兼容的 URL,例如: ntfy://ntfy.sh/your-private-topicdiscord://webhookid/webhooktokenslack://tokenA/tokenB/tokenC

注意事项

  1. Docker socket 权限:挂载 /var/run/docker.sock 相当于赋予容器控制宿主机 Docker 的权限,请仅在受信任的环境中使用。

  2. 更新机制是重建而非热更新:点击 Update 后会停止并删除旧容器,再用相同配置启动新容器,期间该容器提供的服务会短暂中断。生产环境请安排在低峰期。

  3. 通知仅定时检查时触发:手动点 "Check Now" 和启动扫描都不会发送推送通知,避免重启容器时手机被通知刷屏。

  4. 时区设置:记得把 TIMEZONE 改为 Asia/Shanghai(或你所在时区),否则 CHECK_TIME 的执行时刻会按默认的 Australia/Melbourne 计算。

  5. GitHub 通知功能(可选):如需接收 GitHub Webhook 事件,还需设置 GITHUB_WEBHOOK_SECRET 环境变量(用 openssl rand -hex 32 生成),并将 docker-updater 通过反向代理暴露到公网。

参考文档

liquidguru/docker-updater: A lightweight self-hosted web UI for managing Docker container updates — a manual-approval alternative to Watchtower 地址:https://github.com/liquidguru/docker-updater

docker-updater - GitHub Container Registry 地址:https://github.com/liquidguru/docker-updater/pkgs/container/docker-updater

Apprise Notifications - Notification library supporting 80+ services 地址:https://github.com/caronc/apprise

ntfy - Send push notifications to your phone via PUT/POST 地址:https://ntfy.sh/

@所有人:写文不易,如果你都看到了这里,请点个在看,分享给更多的朋友;为确保你能收到每一篇文章,请主页右上角设置星标。

原文地址: https://mp.weixin.qq.com/s?__biz=MzI1NTQxMzc3MA==&mid=2247514302&idx=1&sn=eeeef5a8545c2513e4242d71892fd23f&chksm=ebf77d929c2cf08c3f4ae0caadec5562729365daaf2f43186f07ade26d51eb3d10e7517cb799&mpshare=1&scene=1&srcid=0603hZljmt742uJHDqGgJxqc&sharer_shareinfo=f1ca467494576bec2587f9f1b16089c7&sharer_shareinfo_first=f1ca467494576bec2587f9f1b16089c7#rd

相关文章