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

简介
什么是 docker-updater ?
docker-updater是一个开源的、自托管的轻量级Web UI,用于管理Docker容器的更新。与Watchtower一发布新镜像就自动拉取并重启容器不同,docker-updater按计划轮询镜像仓库,向用户展示可用的更新,由用户决定何时(甚至是否)更新每个容器。在更新前还可以查看GitHub上的发布说明。
主要特点
-
镜像仓库轮询:通过
Docker Registry v2 manifest API(HEAD请求 +Docker-Content-Digest响应头)对比本地镜像摘要与仓库摘要,无需实际拉取镜像 -
多仓库支持:支持
Docker Hub、GHCR(ghcr.io)、LinuxServer(lscr.io)以及任何实现了Bearer token挑战的镜像仓库 -
单容器精细控制:可逐个更新、延期
7/14/30/90天或无限期延期,也可随时取消延期 -
批量更新:一次选择多个容器批量更新
-
更新日志查看器:对于发布
org.opencontainers.image.source标签的镜像,可获取其GitHub仓库最近5个Release -
实时更新日志:流式日志弹窗实时显示拉取进度和容器重建状态,刷新页面也能自动重连
-
推送通知:首次运行自动生成私有的
ntfy主题;也可使用自己的Apprise URL(ntfy、Pushover、Discord、Slack等) -
GitHub 通知(可选):可选的
Webhook端点接收任意仓库的issue、PR、star、push、release事件并转发为推送通知 -
定时检查:按配置的时间和时区每日定时检查;通知仅在定时检查时触发,启动和手动检查不发通知
-
安全重建:使用
Python Docker SDK(Watchtower模式)重建容器,保留所有原始配置:卷、端口、环境变量、网络、重启策略、capabilities等 -
跳过本地构建镜像:没有
RepoDigests的容器(本地 Dockerfile 构建)会被自动忽略 -
持久化状态:更新历史、延期决定和最后检查时间戳在容器重启后仍然保留
-
深色 UI:标签式仪表板分为
Updates/Deferred/Up to Date/Unchecked/All
应用场景
-
家庭服务器用户:群晖、
Unraid等NAS用户希望集中管理几十个Docker容器的更新,但不希望被自动重启打断 -
生产环境运维:需要在更新前评估每个容器的影响,避免
Watchtower式自动更新带来的意外停机 -
多镜像仓库用户:同时使用
Docker Hub、GHCR、LinuxServer等多个镜像源的用户,希望统一管理 -
GitHub 项目维护者:通过
Webhook接收自己维护的项目的issue、PR、star、release等事件推送 -
谨慎型用户:每次更新前想先看
GitHub Release的Changelog确认是否有破坏性变更

docker-updater 是一个把"是否更新"的决定权完全交还给用户的 Docker 更新管理工具,填补了 Watchtower 全自动更新和手动 docker pull 之间的空白。
安装
在群晖上以 Docker 方式安装。
该项目为单容器项目,镜像托管在 ghcr.io,所以只支持 docker cli 和 docker-compose 两种安装方式。
本文写作时,
latest版本对应为sha-c5a2cdc;

docker cli 安装
如果你熟悉命令行,可能用 docker cli 更快捷
# 新建文件夹 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 文件
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 登录到您的群晖,执行下面的命令:
# 新建文件夹 docker-updater 和 子目录
mkdir -p /volume1/docker/docker-updater/data
# 进入 docker-updater 目录
cd /volume1/docker/docker-updater
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d
运行
在浏览器中访问 http://<群晖IP>:9292 即可进入 Web 界面

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

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

会看到升级日志

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

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

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

如果希望接收推送通知:
-
不设置
NOTIFY_URL:首次运行后仪表板顶部会出现绿色横幅,显示自动生成的私有ntfy主题,点击 Copy 复制后在手机ntfy APP中订阅即可 -
自定义
NOTIFY_URL:使用任意 Apprise 兼容的 URL,例如:ntfy://ntfy.sh/your-private-topic、discord://webhookid/webhooktoken、slack://tokenA/tokenB/tokenC等
注意事项
-
Docker socket 权限:挂载
/var/run/docker.sock相当于赋予容器控制宿主机Docker的权限,请仅在受信任的环境中使用。 -
更新机制是重建而非热更新:点击
Update后会停止并删除旧容器,再用相同配置启动新容器,期间该容器提供的服务会短暂中断。生产环境请安排在低峰期。 -
通知仅定时检查时触发:手动点 "Check Now" 和启动扫描都不会发送推送通知,避免重启容器时手机被通知刷屏。
-
时区设置:记得把
TIMEZONE改为Asia/Shanghai(或你所在时区),否则CHECK_TIME的执行时刻会按默认的Australia/Melbourne计算。 -
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/
@所有人:写文不易,如果你都看到了这里,请点个赞和在看,分享给更多的朋友;为确保你能收到每一篇文章,请主页右上角设置星标。