Diun — уведомления об обновлениях Docker-образов#
Что такое Diun#
Diun (Docker Image Update Notifier) — это инструмент с открытым исходным кодом, разработанный CrazyMax, который следит за обновлениями Docker-образов и уведомляет, когда выходит новая версия.
Diun не обновляет контейнеры автоматически — он лишь сообщает, что появилась новая версия образа, оставляя решение за вами. Это особенно важно, если вы хотите контролировать процесс обновления и избегать непредвиденных изменений в продакшене.
Это существенное отличие от такого приложения как Watchtower, которое не только проверяет наличие новой версии, но и сразу устанавливает ее.
DIUN - рекомендуемое приложение для мониторинга контейнеров от linuxserver.io
Зачем нужен Diun#
Если у вас есть домашний сервер, кластер Proxmox или просто несколько контейнеров на VPS, со временем образы устаревают. Проверять обновления вручную — неудобно.
Diun решает эту задачу автоматически:
- Проверяет Docker Hub, GHCR, Quay.io, GitLab и приватные реестры  
- Работает по cron-расписанию или при старте  
- Отправляет уведомления через десятки сервисов  
- Поддерживает фильтры и теги  
- Может отслеживать контейнеры, compose-файлы, stack-и или registry-списки
Установка Diun через Docker Compose#
Создайте каталог и файл `docker-compose.yml`
Ниже привожу свой вариант docker compose файла, который использовался в ролике
services:
    diun:  # Определяем сервис Diun в составе Docker Compose
        image: crazymax/diun:latest  # Официальный образ Diun с Docker Hub
        container_name: diun         # Имя контейнера (для удобства в `docker ps`)
        command: serve               # Основная команда — запустить веб/cron-сервис Diun
        volumes:
            - "/path/to/user/directory/data:/data"  # Локальный каталог для хранения базы данных и конфигурации Diun
            - "/var/run/docker.sock:/var/run/docker.sock"  # Доступ к Docker API для отслеживания образов и контейнеров
        environment:
            - "TZ=Europe/Moscow"  # Устанавливаем часовой пояс (важно для cron и временных меток)
            - "LOG_LEVEL=info"    # Уровень логирования: trace | debug | info | warn | error | fatal | panic
            - "DIUN_WATCH_WORKERS=50"  # Количество параллельных потоков при проверке образов (ускоряет работу при множестве контейнеров)
            - "DIUN_WATCH_SCHEDULE=0 */6 * * *"  # Cron-расписание: проверять обновления каждые 6 часов
            - "DIUN_WATCH_JITTER=30s"  # Добавляет случайную задержку (до 30 секунд), чтобы избежать одновременного старта нескольких задач
            - "DIUN_WATCH_RUNONSTARTUP=true"  # Запуск проверки сразу при старте контейнера, не дожидаясь расписания
            - "DIUN_PROVIDERS_DOCKER=true"  # Активирует провайдер Docker: Diun будет отслеживать образы запущенных контейнеров
            - "DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=true"  # Включает мониторинг всех контейнеров по умолчанию, без необходимости вручную задавать label `diun.enable=true`
            # --- Настройки уведомлений через Telegram ---
            - "DIUN_NOTIF_TELEGRAM_TOKEN=token"  # Токен Telegram-бота, созданного через @BotFather
            - "DIUN_NOTIF_TELEGRAM_chatIDs=chatid"  # ID чата или пользователя, куда будут отправляться уведомления (можно указать несколько через запятую)
            # --- Настройки уведомлений через Gotify ---
            - "DIUN_NOTIF_GOTIFY_ENDPOINT=https://gotify.domain.ru"  # URL вашего сервера Gotify
            - "DIUN_NOTIF_GOTIFY_TOKEN=token"  # Токен приложения Gotify (создаётся в веб-интерфейсе Gotify)
            - "DIUN_NOTIF_GOTIFY_PRIORITY=1"  # Приоритет уведомления (0 — низкий, 5 — высокий)
            - "DIUN_NOTIF_GOTIFY_TIMEOUT=10s"  # Таймаут ожидания ответа от Gotify при отправке уведомления
        labels:
            - "diun.enable=true"  # Метка, разрешающая Diun отслеживать этот контейнер (опционально, если `WATCHBYDEFAULT=false`)
        restart: always  # Перезапуск контейнера при сбое или перезагрузке Docker-хоста
После первого запуска Diun создаст базу data/diun.db и начнёт мониторить все контейнеры Docker. Более подробно можно будет посмотреть в логах приложения
Diun гибко настраивается. Ниже — краткий обзор самых полезных возможностей.
Режимы работы#
- Watch (наблюдение) — Diun периодически сканирует все контейнеры, чтобы проверить обновления.
 - Events (события) — реагирует на запуск контейнера и проверяет, есть ли более свежий образ.
 - Database mode — хранит состояние всех проверенных образов, чтобы не слать повторные уведомления.
 
Метки контейнеров#
Можно указать, какие контейнеры отслеживать. Добавьте в docker-compose.yml:
labels:
  - "diun.enable=true" 
или наоборот — исключите ненужные контейнеры.
Провайдеры#
Diun поддерживает разные источники:
docker— работа с локальным Docker-демономswarm— отслеживание образов в Docker Swarmfile— список образов в YAML-файлеkubernetes— (экспериментально) проверка образов в подахwatchtower— импорт конфигурации из Watchtower
Пример YAML-провайдера:
db:
  path: diun.db
watch:
  workers: 20
  schedule: "0 */6 * * *"
regopts:
  - name: "myregistry"
    username: fii
    password: bor
    timeout: 5s
  - name: "docker.io/crazymax"
    selector: image
    username: fii
    password: bor
  - name: "docker.io"
    selector: image
    username: foo
    password: bar
providers:
  file:
    filename: /path/to/config.yml
### /path/to/config.yml
# Watch latest tag of crazymax/nextcloud image on docker.io (DockerHub)
# with registry options named 'docker.io/crazymax' (image selector).
- name: docker.io/crazymax/nextcloud:latest
# Watch 4.0.0 tag of jfrog/artifactory-oss image on frog-docker-reg2.bintray.io (Bintray)
# with registry options named 'myregistry' (name selector).
- name: jfrog-docker-reg2.bintray.io/jfrog/artifactory-oss:4.0.0
  regopt: myregistry
# Watch coreos/hyperkube image on quay.io (Quay) and assume latest tag.
# Add foo=bar metadata to be used in notification template.
- name: quay.io/coreos/hyperkube
  metadata:
    foo: bar
# Watch crazymax/swarm-cronjob image and assume docker.io registry and latest tag
# with registry options named 'docker.io/crazymax' (image selector).
# Only include tags matching regexp ^1\.2\..* and only be notified on new tag.
- name: crazymax/swarm-cronjob
  watch_repo: true
  notify_on:
    - new
  include_tags:
    - ^1\.2\..*
# Watch portainer/portainer image on docker.io (DockerHub) and assume latest tag
# with registry options named 'docker.io' (image selector).
# Only watch latest 10 tags and include tags matching regexp ^\d+\.\d+\..*
- name: docker.io/portainer/portainer
  watch_repo: true
  max_tags: 10
  include_tags:
    - ^\d+\.\d+\..*
# Watch alpine image (library) and assume docker.io registry and latest tag
# with registry options named 'docker.io' (image selector).
# Force linux/arm64/v8 platform for this image
- name: alpine
  watch_repo: true
  platform:
    os: linux
    arch: arm64
    variant: v8
Более подробно можно почитать в официальной документации
Уведомления (notifications)#
Diun умеет отправлять уведомления более чем в 15 сервисов:
| Сервис | Переменные окружения | 
|---|---|
| Telegram | DIUN_NOTIF_TELEGRAM_TOKEN, DIUN_NOTIF_TELEGRAM_CHATIDS | 
| Discord | DIUN_NOTIF_DISCORD_WEBHOOKURL | 
| Gotify | DIUN_NOTIF_GOTIFY_ENDPOINT, DIUN_NOTIF_GOTIFY_TOKEN | 
| Slack | DIUN_NOTIF_SLACK_WEBHOOKURL | 
DIUN_NOTIF_MAIL_SMTP_HOST, DIUN_NOTIF_MAIL_FROM, DIUN_NOTIF_MAIL_TO | |
| Webhook | DIUN_NOTIF_WEBHOOK_ENDPOINT | 
Можно использовать несколько сервисов для уведомлений одновременно, как это указано у меня в docker compose файле.
Заключение#
Diun — это обязательный инструмент для всех, кто использует Docker в self-hosted инфраструктуре.
Он лёгкий, стабильный, не требует сложной настройки и отлично сочетается с другими DevOps-сервисами.
Если вы хотите держать свою инфраструктуру в актуальном состоянии, Diun поможет вовремя узнавать об обновлениях и избегать сюрпризов.

