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 教程。容器管理和日志查看可以参考 LazyDockerDozzle。选购搬瓦工 VPS 请访问 bwh81.net,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。