DockUP:轻量的 Telegram Docker 管理工具
DockUP 是一个轻量自托管 Telegram Docker 管理工具,支持自动检测容器更新、Telegram 按钮确认更新、本机/远程 VPS Docker 管理、中心端 + Agent 模式和安全删除远程服务器记录。
如果你有几台自托管服务,Docker 容器更新这件事通常会变成两种极端:要么完全手动,想起来才去 docker compose pull;要么交给自动更新工具,镜像一变就直接重建容器。
完全手动的问题是容易忘。完全自动的问题是有点激进:上游镜像偶尔发坏版本,或者某些核心服务不适合无脑更新,出了问题还要回滚。
DockUP 一开始只是想解决“发现更新但不要自动动手”这个问题:它帮你定时检测更新,但真正更新前会先发 Telegram 按钮,由你点一下确认。
现在它更进一步:除了自动更新提醒,也可以直接当作一个轻量的 Telegram Docker 管理入口,用按钮查看本机 Docker / Compose 项目、检查更新、启动、停止、重启和删除。后面又加了中心端 + Agent 模式,可以从一个 Telegram Bot 管理多台 VPS 上的 Docker 项目。
项目地址:https://github.com/shuijiao1/DockUP
它现在能做什么
DockUP 是一个轻量 Telegram Docker 管理工具,不是完整运维平台。
它主要做这些事:
- 默认每 12 小时检测当前机器正在运行的 Docker 容器;
- 发现镜像更新时,给对应容器发送 Telegram 按钮通知;
- 更新前需要手动点击确认,也可以忽略本次更新;
- 支持检查全部、本机单个项目、远程 VPS 或远程单个项目更新;
- 发现多个更新时可以逐个更新,也可以批量更新;
- 在 Telegram 里列出本机 Docker 容器和 Docker Compose 项目;
- 点进项目后查看状态、镜像、镜像版本、端口、CPU、内存、网络和磁盘 I/O;
- 支持启动、停止、重启项目;
- 删除项目需要二次确认;
- 支持中心端 + Agent 模式管理多台 VPS;
- 远程 Agent 主动连接中心端,不需要默认暴露管理端口;
- 支持在 Telegram 里添加远程服务器并生成 Agent 安装命令;
- 删除远程 VPS 时给出固定卸载命令,确认 Agent 离线后再删除本机记录;
- 可以通过按钮临时调整自动检查间隔;
- DockUP 本体和远程 dockup-agent 也会检测更新,并通过临时 helper 处理自更新。
这样既不用每天手动检查,也不会让更新在你不知道的情况下直接发生。需要看状态或临时操作时,也不用 SSH 上去敲一串 Docker 命令。现在如果有多台 VPS,也可以把 DockUP 当作一个轻量的 Telegram Docker 管理中心。
为什么不是全自动更新
Docker 自动更新工具已经有不少,Watchtower 就是很典型的一个。但我更想要的是一个更窄、更直接的工具:
- 自动检查,但不自动更新;
- 只通过 Telegram 做通知和交互;
- Docker / Compose 项目能直接点按钮管理;
- 不做 Web 面板;
- 不做 Slack、邮件、Teams 等一堆通知渠道;
- 不做复杂白名单、黑名单和调度系统。
对个人自托管来说,很多功能其实用不上。真正高频的需求往往只是:有更新时告诉我,我确认后你再动;想看容器状态时,Telegram 里点一下就能看到。
DockUP 就按这个思路做。
Telegram 管理面板
DockUP 启动后会发送一条入口消息,可以直接进入 Docker 管理面板。
也会自动注册 Telegram 命令菜单:
| 命令 | 说明 |
|---|---|
/start | 打开 DockUP 主菜单 |
/docker | 查看 Docker / Compose 项目 |
/checkall | 立即检查全部容器更新 |
/settings | 设置自动检查间隔 |
/help | 显示帮助和主菜单 |
项目列表会按 Docker / Compose 项目展示。点进项目后,页面会优先展示重点信息,再展示容器详情,例如:
🐳 dashboard
🟢 运行中
📌 概览
🏷️ 类型:📦 Compose
📦 容器:1 个 · 运行中 1 个
📁 目录:/opt/nezha/dashboard
🧩 Compose:/opt/nezha/dashboard/docker-compose.yaml
📦 容器详情
🟢 nezha-dashboard / dashboard
🚦 状态:🟢 运行中
🖼️ 镜像:ghcr.io/nezhahq/nezha:latest
📊 占用:CPU 0.04% · 内存 263.6MB
🌐 端口:*:8008→8008/tcp, :::8008→8008/tcp
📡 网络:↓35.8MB ↑34.2MB
💾 磁盘:读 55.8MB · 写 672.3MB
🆔 ID:9056343d3b41 · ⏱️ 启动:2026-05-21 21:36
下面会有按钮,比如检查更新、重启、启动、停止、删除、返回列表等。删除会再弹出确认按钮,避免误点。
远程 VPS 管理
后面 DockUP 加了一个比较重要的功能:中心端 + Agent 模式。
以前 DockUP 更像是管理本机 Docker 的 Telegram 入口;现在可以在一台机器上跑中心端,然后给其他 VPS 安装 dockup-agent。远程 Agent 会主动连接中心端,接入后就能在 Telegram 的 🌐 远程 VPS 页面里查看和管理。
添加远程服务器的大致流程是:
- 在 Bot 主菜单点击 ➕ 添加服务器;
- 发送服务器名称或 IP;
- DockUP 生成一条 Docker Compose 安装命令;
- 到目标 VPS 上执行这条命令;
- Agent 主动连回中心端;
- Bot 收到接入通知后,就能在远程列表里管理这台 VPS。
远程 Agent 默认不映射管理端口,只通过 DOCKUP_PUBLIC_URL 主动连接中心端 /v1/reverse/connect。这样比让每台 VPS 都暴露一个管理 API 更适合轻量自托管场景。
远程 VPS 接入后,可以查看远程 Docker / Compose 项目,也可以手动检查远程更新、逐个更新或批量更新。
删除远程 VPS
远程管理加上后,删除流程也做了安全处理。
在 🌐 远程 VPS 页面点进服务器详情,可以点击 🗑 删除服务器。DockUP 不会直接在远端执行任意命令,而是给出固定卸载命令:
cd /opt/dockup && docker compose down
如果确认 /opt/dockup 里没有要保留的内容,再手动清理目录:
rm -rf /opt/dockup
执行完成后,回到 Bot 点击 我已执行,检查并删除。DockUP 会检查 Agent 是否已经离线,确认连不上后再备份并删除中心端本机的服务器记录。
如果远端机器已经销毁,也可以选择 强制只删除本机记录。删除前会自动备份配置文件到 backups/ 目录,避免误删后没法恢复。
自动更新提醒仍然保留
发现更新后,DockUP 会给每个容器单独发一条消息,消息里有两个按钮:
- 更新:停止旧容器,用原配置创建并启动新容器;
- 忽略:编辑原消息,标记本次忽略。
一台机器上如果有多个容器有更新,就会分别收到多条通知。这样比把所有更新塞在一条长消息里更清楚,也方便逐个处理。
版本显示会尽量用语义化标签,例如:
🐳 发现 Docker 镜像更新
容器:sub-store
镜像:xream/sub-store:latest
旧版本:2.23.18 (4b93e28dba93)
新版本:2.23.19 (2a6cc51b55d7)
请选择是否更新。
如果拿不到具体 tag,就回退显示短镜像 ID。
无更新时不会刷 Telegram,只写日志。
手动 检查全部更新 会重新扫描当前所有本机容器和在线远程 Agent:即使之前单独通知点过“忽略”,也不会影响本次检查结果。检查结果页面会显示本机 / 远程更新数量,并给出“全部更新”和逐项更新按钮。
更新时会尽量保持原配置
点击更新后,DockUP 会尽量复用旧容器的配置来创建新容器,包括环境变量、挂载、端口、网络、重启策略等 Docker 配置。
大致流程是:
- 停止旧容器;
- 把旧容器重命名成备份容器;
- 用原配置创建新容器;
- 启动新容器;
- 如果有 healthcheck,就等待健康检查通过;
- 成功后删除备份容器;
- 按配置清理旧镜像。
如果新容器启动失败,或者健康检查不通过,DockUP 会尝试删除新容器并恢复旧容器。
这不能替代真正的备份和发布流程,但对普通自托管容器来说,至少比简单粗暴地删旧容器重建安全一些。
远程 VPS 也能接入
如果你有多台 VPS,不一定要让每台机器都暴露 HTTP Agent。DockUP 支持反向连接 Agent:远程机器主动连回中心端,中心端再通过这条连接下发查看状态、检查更新和更新容器等操作。
这对没有公网管理入口、或者不想额外开放端口的服务器更方便。远程 Agent 更新容器时会沿用配置里的 UPDATE_TIMEOUT,所以遇到较大的镜像拉取、较慢的网络或健康检查等待时,中心端也能等到完成回执,不会让 Telegram 消息一直卡在“正在更新”。
DockUP 也能更新自己
DockUP 本身也是一个 Docker 容器,所以它也会被纳入检测范围。
比较麻烦的是:如果 DockUP 直接更新自己,更新过程中它会把自己停掉,后续步骤就没法继续执行。
所以 DockUP 更新自己时会启动一个临时 helper 容器,由 helper 去替换 DockUP 本体。这样可以避免“自己杀自己”的问题。
远程 dockup-agent 自更新时也类似:Agent 会先启动临时 helper 执行更新,并尽快向中心端返回结果,避免更新过程中连接断开导致 Telegram 一直卡在“正在更新”。
部署方式
推荐使用 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 里应该会收到一条入口消息,可以打开 Docker 管理面板。如果没有收到,通常优先检查 Bot Token 和 Chat ID。
完整说明见 README:https://github.com/shuijiao1/DockUP
适合哪些场景
DockUP 比较适合:
- 个人自托管 Docker 服务;
- 想知道容器镜像有没有更新;
- 不想完全自动更新;
- 希望在 Telegram 里逐个确认更新;
- 希望在 Telegram 里轻量查看和管理 Docker / Compose 项目;
- 有多台 VPS,想从一个 Telegram Bot 里查看和管理;
- 服务数量不多,但希望少一点手工检查和 SSH 操作。
如果你需要复杂的更新窗口、分组策略、多通知渠道、审计系统、灰度发布或 Kubernetes 编排,那 DockUP 不适合。它就是一个轻量工具,不打算做成大而全的平台。
使用前要注意
DockUP 需要挂载:
/var/run/docker.sock
这意味着它拥有宿主机 Docker 管理权限。部署时请只给自己信任的 Bot 使用,不要把真实 .env 泄露出去。
另外,点击“更新”前仍然建议判断一下服务风险。数据库、反向代理、监控面板这类核心服务,最好确认自己能接受更新带来的影响。
DockUP 会尽量回滚失败更新,但它不能替代数据备份。
远程 Agent 模式下,中心端需要能被远程 VPS 访问到;Telegram 侧也只接受配置的 TG_CHAT_ID 对应聊天 / 用户的命令和按钮回调。
小结
DockUP 现在的定位是:轻量 Telegram Docker 管理工具 + 自动更新提醒 + 多 VPS Agent 管理。
它不像完整运维平台那样功能很多,但也正因为功能少,部署和理解都很直接。自动检测更新、手动确认更新、查看项目状态、远程 VPS 接入、常用启停操作都放在 Telegram 按钮里,对个人自托管场景已经够顺手。
如果你想给自己的自托管 Docker 服务加一个轻量管理入口,DockUP 会是一个比较顺手的选择。