2026-05-21 · DockUP / Docker / Telegram Bot / 自托管

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 页面里查看和管理。

添加远程服务器的大致流程是:

  1. 在 Bot 主菜单点击 ➕ 添加服务器
  2. 发送服务器名称或 IP;
  3. DockUP 生成一条 Docker Compose 安装命令;
  4. 到目标 VPS 上执行这条命令;
  5. Agent 主动连回中心端;
  6. 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 配置。

大致流程是:

  1. 停止旧容器;
  2. 把旧容器重命名成备份容器;
  3. 用原配置创建新容器;
  4. 启动新容器;
  5. 如果有 healthcheck,就等待健康检查通过;
  6. 成功后删除备份容器;
  7. 按配置清理旧镜像。

如果新容器启动失败,或者健康检查不通过,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 会是一个比较顺手的选择。

仓库地址:https://github.com/shuijiao1/DockUP