DockUP:一个轻量的 Docker 更新提醒工具
DockUP 是一个轻量自托管 Docker 更新提醒工具,默认每 12 小时检测运行中的容器,有更新时通过 Telegram 按钮让你确认更新或忽略。
如果你有几台自托管服务,Docker 容器更新这件事通常会变成两种极端:要么完全手动,想起来才去 docker compose pull;要么交给自动更新工具,镜像一变就直接重建容器。
完全手动的问题是容易忘。完全自动的问题是有点激进:上游镜像偶尔发坏版本,或者某些核心服务不适合无脑更新,出了问题还要回滚。
DockUP 想解决的就是中间这一段:它帮你定时检测更新,但真正更新前会先发 Telegram 按钮,由你点一下确认。
项目地址:https://github.com/shuijiao1/DockUP
它解决什么问题
DockUP 是一个轻量 Docker 更新提醒器,不是完整运维平台。
它的工作方式很简单:
- 定时检查当前机器正在运行的 Docker 容器;
- 拉取容器当前使用的镜像标签;
- 如果镜像 ID 发生变化,说明有新镜像;
- 给这个容器单独发一条 Telegram 通知;
- 你点击“更新”,它再重建容器;
- 你点击“忽略”,这次更新就跳过。
这样既不用每天手动检查,也不会让更新在你不知道的情况下直接发生。
为什么不是全自动更新
Docker 自动更新工具已经有不少,Watchtower 就是很典型的一个。但我更想要的是一个更窄、更直接的工具:
- 只检测运行中的容器;
- 只通过 Telegram 通知;
- 只在点击按钮后更新;
- 不做 Web 面板;
- 不做 Slack、邮件、Teams 等一堆通知渠道;
- 不做复杂白名单、黑名单和调度系统。
对个人自托管来说,很多功能其实用不上。真正高频的需求往往只是:有更新时告诉我,我确认后你再动。
DockUP 就按这个思路做。
Telegram 按钮确认
发现更新后,DockUP 会给每个容器单独发一条消息,消息里有两个按钮:
- 更新:停止旧容器,用原配置创建并启动新容器;
- 忽略:编辑原消息,标记本次忽略。
一台机器上如果有多个容器有更新,就会分别收到多条通知。这样比把所有更新塞在一条长消息里更清楚,也方便逐个处理。
启动、重启或更新 DockUP 本体后,也会发送一条测试消息,带两个无操作按钮,用来确认 Bot 和按钮样式正常。
无更新时不会刷 Telegram,只写日志。
更新时会尽量保持原配置
点击更新后,DockUP 会尽量复用旧容器的配置来创建新容器,包括环境变量、挂载、端口、网络、重启策略等 Docker 配置。
大致流程是:
- 停止旧容器;
- 把旧容器重命名成备份容器;
- 用原配置创建新容器;
- 启动新容器;
- 如果有 healthcheck,就等待健康检查通过;
- 成功后删除备份容器;
- 按配置清理旧镜像。
如果新容器启动失败,或者健康检查不通过,DockUP 会尝试删除新容器并恢复旧容器。
这不能替代真正的备份和发布流程,但对普通自托管容器来说,至少比简单粗暴地删旧容器重建安全一些。
DockUP 也能更新自己
DockUP 本身也是一个 Docker 容器,所以它也会被纳入检测范围。
比较麻烦的是:如果 DockUP 直接更新自己,更新过程中它会把自己停掉,后续步骤就没法继续执行。
所以 DockUP 更新自己时会启动一个临时 helper 容器,由 helper 去替换 DockUP 本体。这样可以避免“自己杀自己”的问题。
部署方式
推荐使用 Docker Compose。
mkdir -p /opt/dockup && cd /opt/dockup
curl -Lo docker-compose.yml https://github.com/shuijiao1/DockUP/releases/latest/download/docker-compose.yml
准备 .env:
TZ=Asia/Shanghai
TG_BOT_TOKEN=123456:your_bot_token_here
TG_CHAT_ID=123456789
CHECK_INTERVAL=12h
CLEANUP=true
SETUP_TEST_MESSAGE=true
然后启动:
docker compose pull
docker compose up -d
docker compose logs -f
启动成功后,Telegram 里应该会收到一条测试消息。如果没有收到,通常优先检查 Bot Token 和 Chat ID。
完整说明见 README:https://github.com/shuijiao1/DockUP
适合哪些场景
DockUP 比较适合:
- 个人自托管 Docker 服务;
- 想知道容器镜像有没有更新;
- 不想完全自动更新;
- 希望在 Telegram 里逐个确认;
- 服务数量不多,但希望少一点手工检查。
如果你需要复杂的更新窗口、分组策略、多通知渠道、审计系统、灰度发布或 Kubernetes 编排,那 DockUP 不适合。它就是一个小工具,不打算做成大而全的平台。
使用前要注意
DockUP 需要挂载:
/var/run/docker.sock
这意味着它拥有宿主机 Docker 管理权限。部署时请只给自己信任的 Bot 使用,不要把真实 .env 泄露出去。
另外,点击“更新”前仍然建议判断一下服务风险。数据库、反向代理、监控面板这类核心服务,最好确认自己能接受更新带来的影响。
DockUP 会尽量回滚失败更新,但它不能替代数据备份。
小结
DockUP 的定位很窄:定时检测 Docker 容器更新,有更新就发 Telegram 按钮,点了再更新。
它不像完整自动更新平台那样功能很多,但也正因为功能少,部署和理解都很直接。
如果你想给自己的自托管 Docker 服务加一个轻量更新提醒入口,DockUP 会是一个比较顺手的选择。