WARNING
Watchtower больше официально не поддерживается, а его репозиторий отправлен в публичный архив. Так же после обновления API Docker до версии 1.52 Watchtower перестал работать и не имеет обратной совместимости с более ранними версиями. В настоящий момент он поддерживает версию API Docker 1.25, и по обратной совместимости 1.44. В сязи с этим вы можете наблюдать ошибку Error response from daemon: client version 1.25 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version при запуске контейнера. Eсли хоите и дальше продолжать использовать Wathtower, то можете воспользоваться форками от комьюнити. Либо воспользоваться более интересной и функциональной альтернативой - Komodo.
Watchtower - это инструмент для автоматического обновления Docker-контейнеров. Он отслеживает изменения в образах контейнеров, автоматически обновляет их до последней версии и отправляет уведомления, что упрощает поддержку актуального состояния приложений.
Основные функции:
- Автоматическое обновление: Watchtower проверяет Docker Hub или другие реестры на наличие обновлений образов и перезапускает контейнеры с новыми версиями.
- Поддержка тегов: Можно настроить обновление только для определённых тегов образов.
- Оповещения: Интеграция с уведомлениями (например, через Slack, Discord, Telegram) о выполненных обновлениях.
- Гибкость: Поддержка различных конфигураций, включая использование приватных реестров.
Запуск Watchtower
NOTE
В данном примере будут использоваться уведомления в Телеграм.
Создаем файл docker-compose:
---
services:
watchtower:
image: containrrr/watchtower:latest
container_name: watchtower
environment:
- WATCHTOWER_NOTIFICATIONS_HOSTNAME=${WATCHTOWER_NOTIFICATIONS_HOSTNAME}
- WATCHTOWER_NOTIFICATIONS=${WATCHTOWER_NOTIFICATIONS}
- WATCHTOWER_NOTIFICATION_URL=${WATCHTOWER_NOTIFICATION_URL}
- TZ=Europe/Moscow
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
command: --rolling-restart --cleanup --schedule "0 0 3 * * *"
Затем создаем .env файл в котором указываем token и chat id телеграм бота:
WATCHTOWER_NOTIFICATIONS_HOSTNAME=hostname
WATCHTOWER_NOTIFICATIONS=shoutrrr
WATCHTOWER_NOTIFICATION_URL=telegram://<telegram_token>@telegram/?channels=<bot_chat_id>
Небольшое пояснение переменных и команд
WATCHTOWER_NOTIFICATIONS_HOSTNAME=hostname- хостнейм, который будет использоваться в уведомленияхWATCHTOWER_NOTIFICATIONS=shoutrrr- использование библиотека уведомленийshoutrrr--rolling-restart- перезапускает по одному образу за раз вместо остановки и запуска всех сразу--cleanup- удаляет старые образы после обновления--schedule "0 0 3 * * *"- интервал проверки и обновлений (в данном примере проверка выполняется каждый день в три часа ночи)
Больше информации можно найти в документации Watchtower.
TIP
Чтобы исключить контейнер из автоматического обновления необходимо добавить метку:
labels:
- 'com.centurylinklabs.watchtower.enable=false'
Заключение
Теперь Watchtower будет автоматически обновлять на контейнеры и присылать уведомления в Telegram.
