Docker容器更新监控利器Drydock

简介

什么是 Drydock?

Drydock 是一款开源的容器更新监控工具,使用 TypeScript 构建,现代化 UI 设计。它可以自动发现运行的容器,检测 23 个镜像仓库的更新,并通过 20+ 种渠道发送通知。与 WatchtowerOuroboros 等传统工具不同,Drydock 提供了完整的 Web 管理界面和丰富的企业级功能。

主要特点

  • 🌐 Web UI 仪表盘:现代化的响应式界面,支持浅色/深色主题
  • 📦 23 个镜像仓库支持Docker HubGHCRECRGCRGARGitLabQuayHarbor
  • 🔔 20 种通知方式SlackDiscordTelegramTeamsMatrixSMTPMQTTHTTP Webhook
  • 🔐 多种认证方式Basic AuthOIDC(支持 AutheliaAuth0Authentik
  • 📊 Prometheus 指标:内置 /metrics 端点,便于集成监控栈
  • 🔄 Docker Compose 更新:支持自动拉取和重建服务
  • 📝 审计日志:完整的事件追踪和持久化存储
  • 🛡️ 安全扫描:集成 Trivy 漏洞扫描,阻止不安全更新
  • 💾 镜像备份与回滚:更新前自动备份,一键回滚
  • 🤖 分布式架构:支持远程 Docker 主机监控
  • 📱 移动端适配:完整响应式设计

应用场景

  • 🏠 个人 homelab:监控家庭实验室中的所有容器更新
  • 🏢 企业 DevOps:统一监控多台服务器的容器状态
  • 🔔 自动化运维:通过 webhook 对接 CI/CD 系统实现自动化更新
  • 📊 运维监控:结合 PrometheusGrafana 实现可视化监控
  • 🔒 安全合规:扫描镜像漏洞,确保更新安全性

DrydockWhat's Up Docker? (WUD) 的完美替代品,兼容 WUD 的所有配置和环境变量。

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 codeswhat ,选择第一个 codeswhat/drydock,版本选择 latest

本文写作时, latest 版本对应为 1.3.9

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
# 运行容器
docker run -d \
--restart unless-stopped \
--name drydock \
-p 3516:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DD_AUTH_BASIC_ADMIN_USER=admin \
-e "DD_AUTH_BASIC_ADMIN_HASH={SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=" \
codeswhat/drydock:latest

⚠️ 重要:Drydock 需要访问 Docker socket 来监控容器状态和执行更新操作。

环境变量

环境变量的简单说明,更多的可以参考官方文档,无论是 watcher 还是 trigger 等 ,都是通过环境变量启用的

可变 说明
DD_AUTH_BASIC_ADMIN_USER admin 管理用户名
DD_AUTH_BASIC_ADMIN_HASH {SHA}... 密码哈希值
TZ Asia/Shanghai 时区设置

上面的哈希值对应的密码是 password生产环境请务必修改为自己的密码

生成密码哈希

要生成密码哈希,可以使用在线工具

地址: https://www.askapache.com/online-tools/htpasswd-generator

生成的格式类似 admin:{SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs=

  • admin 是用户名,作为 DD_AUTH_BASIC_ADMIN_USER的值
  • {SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs= 则是密码生成的哈希,用于DD_AUTH_BASIC_ADMIN_HASH 的值

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
version: '3'

services:
drydock:
image: codeswhat/drydock:latest
container_name: drydock
restart: unless-stopped
ports:
- "3516:3000" # 或改成你喜欢的端口,如 8080:3000
volumes:
# 关键:直接挂载 Docker socket(读写权限,默认就行)
- /var/run/docker.sock:/var/run/docker.sock
# 可选:持久化 Drydock 的数据库/配置(推荐,避免重启丢数据)
- ./data:/store
environment:
# 基础认证(必须设置,否则 UI 进不去!强烈建议改密码)
- DD_AUTH_BASIC_ADMIN_USER=admin
- DD_AUTH_BASIC_ADMIN_HASH={SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=

# watcher 配置(默认本地 watcher 会自动用挂载的 socket,无需额外 env)
# 但如果你想明确指定(可选,通常不需要)
# - DD_WATCHER_LOCAL_SOCKET=/var/run/docker.sock

# 可选:扫描频率(默认每小时,调低减少对 registry 的请求)
- DD_WATCHER_LOCAL_CRON=0 */6 * * * # 每 6 小时扫描一次
- DD_WATCHER_LOCAL_JITTER=300 # ±5 分钟随机

# 关键:定义一个 Docker trigger(名字随便取,比如 "manual" 或 "docker-update")
- DD_TRIGGER_DOCKER_MANUAL_AUTO=false # 关闭自动执行(你只想手动)
- DD_TRIGGER_DOCKER_MANUAL_THRESHOLD=minor # 或 patch / all,根据你想允许的更新级别(minor 最安全)
- DD_TRIGGER_DOCKER_MANUAL_DRYRUN=true # 可选:默认开启 dry-run/preview 模式(推荐,防止误操作)
- DD_TRIGGER_DOCKER_MANUAL_MODE=simple # simple=逐个容器;batch=批量(简单场景用 simple)
# - DD_TRIGGER_DOCKER_MANUAL_ONCE=true

# 可选:代理设置(如果你的宿主机 Docker daemon 已配置全局代理,这里不用加;否则加到这里也可能部分生效)
# - HTTP_PROXY=http://192.168.0.199:7890
# - HTTPS_PROXY=http://192.168.0.199:7890
# - NO_PROXY=localhost,127.0.0.1

# 可选:通知(更新可用时推 ntfy/Telegram 等,手动升级前提醒你)
# - DD_TRIGGER_NTFY_UPDATE_URL=https://ntfy.sh/你的topic
# - DD_TRIGGER_NTFY_UPDATE_AVAILABLE=true

然后通过 SSH 登录到您的群晖,执行下面的命令:

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 drydock 及子目录
mkdir -p /volume1/docker/drydock/data

# 进入 drydock 目录
cd /volume1/docker/drydock

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:3516 就能看到登录界面

使用设置的用户名和密码登录(默认:admin / password

登录成功后的主界面

Containers 可以看到哪些有升级

选择需要升级的容器,点 Update now

Drydock 更新成功的前提是,你的网络访问相应的 docker 仓库没问题

下载成功后,能看到下载的镜像

要想让 drydock 自动更新容器(无人值守),需要配置 Trigger,并开启 auto-update

1
2
3
4
5
6
7
environment:
- DD_TRIGGER_DOCKER_AUTO_UPDATE_AUTO=true # 核心:启用自动执行
- DD_TRIGGER_DOCKER_AUTO_UPDATE_THRESHOLD=minor # 只在 minor/patch 更新时触发(推荐!避免大版本破坏)
# 可选细调:
- DD_TRIGGER_DOCKER_AUTO_UPDATE_MODE=simple # simple=每个容器单独触发;batch=一次性批量
- DD_TRIGGER_DOCKER_AUTO_UPDATE_ONCE=true # 默认只处理一次(避免重复)
- DD_TRIGGER_DOCKER_AUTO_UPDATE_ORDER=50 # 执行顺序,数字越小越先跑

注意事项

  1. 🔐 安全认证:新版本默认启用认证,生产环境务必修改默认密码
  2. 🛡️ Socket 权限:直接挂载 socketroot 权限风险,生产环境推荐使用 socket 代理
  3. 💾 数据持久化:审计日志和配置会存储在容器内,重启会丢失(如需持久化可配置卷挂载)
  4. 🌐 网络访问:确保能访问目标镜像仓库,部分云厂商仓库可能需要认证
  5. 🔄 自动更新:启用 Docker trigger 后会自动更新容器,请确保有备份策略

参考文档

CodesWhat/drydock: Open source container update monitoring — 15 registries, 16 notification triggers, audit log, OIDC auth, Prometheus metrics, and a modern dashboard.
地址:https://github.com/CodesWhat/drydock

Introduction
地址:https://drydock.codeswhat.com/docs