DIUN 镜像更新通知工具教程
与 Watchtower 自动更新不同,有时我们只希望在 Docker 镜像有新版本时收到通知,由运维人员决定是否更新以及何时更新。DIUN(Docker Image Update Notifier)正是这样一款工具,它专注于镜像更新检测和通知,不会自动执行更新操作。本文将介绍如何在搬瓦工 VPS 上部署和配置 DIUN。
一、DIUN 与 Watchtower 的区别
在选择更新工具之前,了解两者的差异很重要:
- DIUN:只负责检测镜像更新并发送通知,不执行任何更新操作。适合生产环境中需要人工审核的场景。
- Watchtower:检测到更新后会自动拉取新镜像并重建容器。适合开发环境或对更新容忍度较高的场景。
DIUN 支持更多的通知渠道,监控配置也更灵活,可以同时监控运行中的容器和未部署的镜像。
二、安装部署
确保已安装 Docker 和 Docker Compose(参考 Docker 安装教程)。
2.1 创建配置文件
mkdir -p /opt/diun/data
cat > /opt/diun/diun.yml <<'EOF'
watch:
workers: 10
schedule: "0 6 * * *"
firstCheckNotif: false
providers:
docker:
watchByDefault: true
watchStopped: false
notif:
webhook:
endpoint: https://your-webhook-url
method: POST
headers:
Content-Type: application/json
templateBody: |
Docker 镜像更新通知:
镜像:{{ .Entry.Image }}
当前版本:{{ .Entry.Manifest.Digest }}
平台:{{ .Entry.Manifest.Platform }}
EOF
2.2 Docker Compose 部署
cat > /opt/diun/docker-compose.yml <<'EOF'
services:
diun:
image: crazymax/diun:latest
container_name: diun
restart: unless-stopped
command: serve
volumes:
- /opt/diun/data:/data
- /opt/diun/diun.yml:/diun.yml:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- TZ=Asia/Shanghai
- DIUN_WATCH_SCHEDULE=0 */6 * * *
- LOG_LEVEL=info
EOF
cd /opt/diun && docker compose up -d
2.3 验证运行
docker logs diun
# 查看已监控的镜像列表
docker exec diun diun image list
三、通知渠道配置
DIUN 支持丰富的通知渠道,以下介绍常用的几种。
3.1 Telegram 通知
notif:
telegram:
token: "你的Bot Token"
chatIDs:
- 你的ChatID
templateBody: |
🐳 镜像更新通知
镜像: {{ .Entry.Image }}
状态: {{ .Entry.Status }}
摘要: {{ .Entry.Manifest.Digest }}
3.2 邮件通知
notif:
mail:
host: smtp.example.com
port: 587
ssl: false
startTLS: true
username: user@example.com
password: your-password
from: diun@example.com
to:
- admin@example.com
templateTitle: "[DIUN] 镜像更新通知"
templateBody: |
以下镜像有更新可用:
镜像名称:{{ .Entry.Image }}
当前摘要:{{ .Entry.Manifest.Digest }}
检测时间:{{ .Meta.Date }}
3.3 Discord 通知
notif:
discord:
webhookURL: https://discord.com/api/webhooks/xxxx/yyyy
templateTitle: "Docker 镜像更新"
templateBody: |
镜像 **{{ .Entry.Image }}** 有新版本可用。
四、高级监控配置
4.1 使用容器标签控制监控
通过 Docker 标签精细控制每个容器的监控行为:
# 在 Docker Compose 中为特定服务配置 DIUN 标签
services:
nginx:
image: nginx:latest
labels:
- "diun.enable=true"
- "diun.watch_repo=true"
- "diun.max_tags=5"
- "diun.include_tags=^\\d+\\.\\d+$"
mysql:
image: mysql:8.0
labels:
- "diun.enable=true"
- "diun.watch_repo=false"
标签说明:
diun.enable:是否启用该容器的监控。diun.watch_repo:是否监控整个仓库的所有标签。diun.max_tags:最多监控的标签数量。diun.include_tags:使用正则表达式过滤要监控的标签。
4.2 监控未部署的镜像
DIUN 不仅可以监控正在运行的容器,还能监控你关注但尚未部署的镜像:
providers:
docker:
watchByDefault: true
file:
directory: /data/images
# 创建镜像监控列表
# /data/images/custom.yml
- name: grafana/grafana
watch_repo: true
max_tags: 3
include_tags:
- "^\\d+\\.\\d+\\.\\d+$"
- name: prom/prometheus
watch_repo: false
五、使用环境变量配置
除了配置文件,DIUN 的大部分选项也可以通过环境变量设置,这在 Docker Compose 中非常方便:
services:
diun:
image: crazymax/diun:latest
container_name: diun
restart: unless-stopped
command: serve
volumes:
- diun-data:/data
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- TZ=Asia/Shanghai
- DIUN_WATCH_WORKERS=10
- DIUN_WATCH_SCHEDULE=0 */6 * * *
- DIUN_WATCH_FIRSTCHECKNOTIF=false
- DIUN_PROVIDERS_DOCKER=true
- DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=true
- DIUN_NOTIF_TELEGRAM_TOKEN=your-bot-token
- DIUN_NOTIF_TELEGRAM_CHATIDS=your-chat-id
volumes:
diun-data:
六、查看监控状态
# 列出所有被监控的镜像
docker exec diun diun image list
# 查看特定镜像的检查历史
docker exec diun diun image inspect --image nginx:latest
# 手动触发一次检查
docker exec diun diun image check
# 删除已不再需要监控的镜像记录
docker exec diun diun image remove --image old-image:tag
七、常见问题
通知未收到
# 检查 DIUN 日志
docker logs diun --tail 50
# 确认配置文件格式正确
docker exec diun diun --config /diun.yml validate
检查频率过高导致 API 限制
Docker Hub 对匿名用户有拉取频率限制。如果监控镜像较多,建议:
- 适当降低检查频率,每天检查一到两次即可。
- 配置 Docker Hub 账号认证以提高限额。
- 减少 worker 数量避免并发请求过多。
总结
DIUN 是一款优秀的镜像更新通知工具,特别适合需要严格控制更新流程的生产环境。它只通知不操作的理念让运维人员保持对更新的完全掌控。如果你需要自动更新功能,可以参考 Watchtower 教程。容器管理和日志查看可以参考 LazyDocker 和 Dozzle。选购搬瓦工 VPS 请访问 bwh81.net,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣。