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

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

Блог MAATRIX · 2026-07-07

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

Зачем 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 \\\n  --name watchtower \\\n  --restart unless-stopped \\\n  -v /var/run/docker.sock:/var/run/docker.sock \\\n  containrrr/watchtower \\\n  --interval 3600 --cleanup
', 'Флаг --interval 3600 задаёт проверку раз в час, --cleanup удаляет старые образы после обновления, чтобы не забивать диск. Проверить, что демон жив:', '
docker logs -f watchtower
']

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

['Следить за всем подряд опасно. Лучше — по метке. Запускаем Watchtower с флагом --label-enable, тогда он трогает только помеченные контейнеры:', '
docker run -d --name watchtower \\\n  --restart unless-stopped \\\n  -v /var/run/docker.sock:/var/run/docker.sock \\\n  containrrr/watchtower --label-enable --interval 21600
', 'А нужный контейнер помечаем при запуске:', '
docker run -d --name app \\\n  --label com.centurylinklabs.watchtower.enable=true \\\n  myrepo/app:stable
', 'В docker-compose это выглядит аккуратнее:', '
services:\n  app:\n    image: myrepo/app:stable\n    labels:\n      - "com.centurylinklabs.watchtower.enable=true"
']

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

['Автообновление без обратной связи — это лотерея. Настроим уведомления, чтобы знать о каждом обновлении:', '
docker run -d --name watchtower \\\n  -v /var/run/docker.sock:/var/run/docker.sock \\\n  -e WATCHTOWER_NOTIFICATIONS=shoutrrr \\\n  -e WATCHTOWER_NOTIFICATION_URL="telegram://BOT_TOKEN@telegram?chats=CHAT_ID" \\\n  containrrr/watchtower --interval 3600
', 'Теперь после каждого апдейта прилетит сообщение: какой контейнер, с какой версии на какую. Если что-то пошло не так — вы узнаете первым, а не от пользователей.']

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

['Хотите видеть, что вышли новые версии, но обновлять вручную? Включите режим только-оповещение:', '
docker run -d --name watchtower \\\n  -v /var/run/docker.sock:/var/run/docker.sock \\\n  -e WATCHTOWER_MONITOR_ONLY=true \\\n  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

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

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

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

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

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

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

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