MAATRIX / Блог / Watchtower: автообновление Docker-контейнеров

Watchtower: автообновление Docker-контейнеров

Watchtower: автообновление Docker-контейнеров на VPS
Блог MAATRIX · 2026-07-07

Watchtower следит за реестром образов и автоматически перезапускает контейнеры на свежих версиях. Разбираем, как включить его безопасно, не сломав прод.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Зачем Watchtower

Ручное обновление контейнеров — рутина: зайти по SSH, дёрнуть docker pull, пересоздать контейнер, проверить логи. Для одного сервиса терпимо, для десяти — уже головная боль. Watchtower делает это сам: периодически опрашивает реестр, находит новый образ с тем же тегом и пересоздаёт контейнер с прежними параметрами.

Особенно удобно на компактном VPS, где крутится связка из нескольких контейнеров (реверс-прокси, приложение, база, бот). На тарифах MAATRIX с AMD EPYC + NVMe pull и пересоздание проходят за секунды, так что окно недоступности сервиса минимально.

  • Плюс: security-патчи прилетают без вашего участия.
  • Минус: обновление на latest иногда ломает совместимость — поэтому ниже настроим уведомления и выборочность.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для Docker

Быстрый старт

Watchtower сам поставляется как контейнер. Самый простой запуск — следить за всеми контейнерами на хосте:

docker run -d \
  --name watchtower \
  --restart unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \
  --interval 3600 --cleanup

Флаг --interval 3600 задаёт проверку раз в час, --cleanup удаляет старые образы после обновления, чтобы не забивать диск. Проверить, что демон жив:

docker logs -f watchtower

Обновлять только нужное

Следить за всем подряд опасно. Лучше — по метке. Запускаем Watchtower с флагом --label-enable, тогда он трогает только помеченные контейнеры:

docker run -d --name watchtower \
  --restart unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower --label-enable --interval 21600

А нужный контейнер помечаем при запуске:

docker run -d --name app \
  --label com.centurylinklabs.watchtower.enable=true \
  myrepo/app:stable

В docker-compose это выглядит аккуратнее:

services:
  app:
    image: myrepo/app:stable
    labels:
      - "com.centurylinklabs.watchtower.enable=true"

Уведомления в Telegram

Автообновление без обратной связи — это лотерея. Настроим уведомления, чтобы знать о каждом обновлении:

docker run -d --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e WATCHTOWER_NOTIFICATIONS=shoutrrr \
  -e WATCHTOWER_NOTIFICATION_URL="telegram://BOT_TOKEN@telegram?chats=CHAT_ID" \
  containrrr/watchtower --interval 3600

Теперь после каждого апдейта прилетит сообщение: какой контейнер, с какой версии на какую. Если что-то пошло не так — вы узнаете первым, а не от пользователей.

Режим мониторинга без обновлений

Хотите видеть, что вышли новые версии, но обновлять вручную? Включите режим только-оповещение:

docker run -d --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e WATCHTOWER_MONITOR_ONLY=true \
  containrrr/watchtower --interval 86400

Watchtower будет раз в сутки сообщать о доступных апдейтах, но пересоздавать контейнеры не станет. Хороший компромисс для прод-сервисов: контроль остаётся за вами.

Частые ошибки

  • Тег latest на проде. Обновление может притащить breaking change. Фиксируйте минорные теги (например :1.24) и обновляйтесь осознанно.
  • Нет бэкапа перед апдейтом. На MAATRIX ежедневные бэкапы включены, но перед крупным обновлением сделайте снапшот вручную.
  • Watchtower обновляет сам себя и рвёт цепочку. Держите его отдельно и не помечайте лишним.
  • Приватный реестр без авторизации. Пробросьте ~/.docker/config.json внутрь контейнера, иначе pull упадёт с 401.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для Docker

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Watchtower обновит контейнер с тегом latest?

Да, если в реестре появился новый образ с тем же тегом. Именно поэтому на проде лучше фиксировать конкретные версии, а latest оставить для тестовых сервисов.

Будет ли простой сервиса при обновлении?

Короткий — контейнер останавливается и пересоздаётся. На быстрых NVMe-дисках MAATRIX это обычно 1-3 секунды. Для zero-downtime нужен оркестратор вроде Swarm или k8s.

Как обновлять только один контейнер?

Запустите Watchtower с флагом --label-enable и пометьте нужный контейнер меткой com.centurylinklabs.watchtower.enable=true.