群晖部署DoUpRo,容器更新翻车自动回滚
简介
什么是 DoUpRo ?
DoUpRo(发音 “do pro”,即Docker Update Rollback)是一个开源的Docker主机监控工具。它可以帮助你查看哪些容器已经过期、立即或在计划中更新它们,当更新出现问题时一键回滚。
DoUpRo 介于 Watchtower 式「静默自动更新」和「手动一个个 docker compose pull && up -d」之间:它监控主机上每一个容器(运行中或已停止),从注册表解析真正的版本号(而不是只显示一个浮动 tag),并且把每一次选择都交给你——立即更新、定时更新,或让某个 stack 按自己的循环策略自动更新。
主要特点
- 精准识别过期容器:显示真实的
Docker状态(不仅是 “running”),并从注册表的实际元数据解析当前版本与可用版本,而非仅凭浮动tag猜测。 - 立即 / 延时 / 自动更新:支持一次性定时任务、按
stack的循环策略(cron或相对延迟),默认全局「仅检测」姿态,自动应用需显式开启。 - 始终可用的回滚:每次更新都会保留旧镜像和完整容器配置。可随时手动回滚;若更新后容器
crash-loop,DoUpRo会自动回滚。 - 多通道通知:支持
Telegram、Discord、Slack、ntfy、Gotify,或任意通用webhook,含按事件 /stack/容器的过滤与持久投递队列。 - 同一套 API,三种入口:
Web UI、CLI与REST API都是同一个后端的不同瘦客户端,三者行为永远一致。 - 面向真实家庭实验室:
RBAC(用户 + 受控API Key)、OIDC/SSO、静态加密密钥、结构化JSON日志(Loki/ELK友好)、Prometheus指标,以及强化CSP的Web UI。 - 开源免费:基于
MIT协议开源,可免费使用和修改。
应用场景
- 家庭实验室批量更新:在
NAS或一台主机上跑几十个容器时,集中查看哪些需要更新,避免逐个stack手动操作。 - 谨慎的自动更新:对关键服务设置「检测到新版本先通知、人工确认后再更新」,更新失败还能自动回滚,不留后患。
- 多 stack 循环策略:给不同
stack配置不同的更新节奏(如业务容器每天、测试容器每周),统一由DoUpRo调度。 - 运维可观测:通过
Prometheus指标、JSON日志与通知通道,把容器更新纳入既有的监控与告警体系。 - 开发者测试:开发者可快速搭建一个带
RBAC和SSO的更新面板,验证镜像发布后的回滚链路。

DoUpRo 是一个让你「既能自动更新、又永远留好后路」的 Docker 容器管家,更新出问题再也不怕无法复原。
安装
在群晖上以 Docker 方式安装。
在注册表中搜索 doupro ,选择第一个 sharlihe/doupro,版本选择 latest。
本文写作时,
latest版本对应为45c1757;

DoUpRo 官方镜像托管在 Docker Hub(sharlihe/doupro),为单容器项目。但它需要挂载宿主机的 /var/run/docker.sock 才能管理容器,而群晖 Docker 套件不支持图形化挂载此类系统 socket,因此只能通过命令行用 docker cli 或 docker-compose 部署。
docker cli 安装
如果你熟悉命令行,可能用 docker cli 更快捷
1 | # 新建文件夹 doupro 和 子目录 |
docker-compose 安装
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
1 | services: |
然后通过 SSH 登录到您的群晖,执行下面的命令:
1 | # 新建文件夹 doupro(命名卷 doupro_data 会自动创建,可不建本地子目录) |

运行
在浏览器中访问 http://<群晖IP>:8718 即可进入登录界面
使用默认账号 admin / admin 登录(若部署时未设置 DOUPRO_ADMIN_USER/DOUPRO_ADMIN_PASSWORD)

系统会强制要求你修改 admin 密码后才能继续操作

在 Containers 页面查看本机所有容器及其更新状态

刷新一下就能看到本机的已经安装的容器

有新版本的会显示可用的版本。对需要更新的容器选择「立即更新」「定时」或「加入循环策略」;更新失败会自动回滚

如果网络不稳定,可能会遇到类似下面的报错
1 | Error: update failed before the original container was removed: pull ghcr.io/wechat-article/wechat-article-exporter:latest: pull image ghcr.io/wechat-article/wechat-article-exporter:latest: Error response from daemon: Get "https://ghcr.io/v2/": EOF |

如果 Docker 守护进程 API 版本低于 1.44,更新和回滚是不行的

在 Notifications → + Add a channel 配置 Telegram / Discord / ntfy 等通知通道

在 Settings → Security 创建 API Key

交互式
REST API文档可在实例的/swagger路径查看;CLI用法见项目https://github.com/arnaudcharles/Doupro/blob/main/manuals/cli.md。

注意事项
- Docker socket 权限等同于 root:
DoUpRo通过读写/var/run/docker.sock来管理和重建容器,这等效于宿主机的root权限。务必在受信任的网络边界内运行,或置于反向代理鉴权之后;更严格的场景可考虑 docker-socket-proxy。 - 数据备份:
DoUpRo会在/data下生成doupro.db数据库以及加密密钥doupro.key。备份数据库时务必连同密钥一起备份,否则加密配置无法恢复。 - 默认账号安全:零配置启动会生成
admin/admin并强制首次改密,但仍建议部署时通过DOUPRO_ADMIN_USER/DOUPRO_ADMIN_PASSWORD直接设定强密码。 - 反向代理:若
DoUpRo前面有Traefik / nginx / Caddy等终止TLS的反向代理,请将DOUPRO_TRUST_PROXY_HEADERS设为true,否则会话/CSRF Cookie的Secure标志可能不正确。 - Docker Hub 限流:监听大量容器时匿名拉取可能触发
Docker Hub速率限制,可在.env中配置DOUPRO_DOCKERHUB_USERNAME/DOUPRO_DOCKERHUB_PASSWORD(建议用Personal Access Token)提升上限。 - 安全建议:生产环境避免使用无
TLS的tcp://Docker API;DoUpRo在检测到此类配置时会拒绝启动,除非显式设置DOUPRO_ALLOW_INSECURE_DOCKER_TCP=true。
参考文档
arnaudcharles/Doupro: Docker Update Rollback tool.
地址:https://github.com/arnaudcharles/Douprosharlihe/doupro - Docker 镜像 | Docker Hub
地址:https://hub.docker.com/r/sharlihe/douproDoUpRo 终端用户手册(Getting started / Containers / Schedule / Notifications / Settings / CLI / FAQ)
地址:https://github.com/arnaudcharles/Doupro/tree/main/manuals