Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

WATCHTOWER_AUTO_UPDATE Linux / DevOps

Автоматическое обновление контейнеров с помощью Watchtower в Docker

Обновлено: 21.08.2026
  • Необходимость вручную отслеживать и обновлять десятки запущенных Docker-контейнеров при выходе новых версий базовых образов.
  • Накопление устаревших и уязвимых версий библиотек в долгоживущих production-контейнерах.
  • Простой сервисов из-за отсутствия автоматизированного пайплайна подтягивания latest-тегов в standalone-окружениях.

1. Базовый запуск Watchtower через Docker CLI

Запуск с автоматической очисткой старых образов и интервалом проверки каждые 24 часа (86400 секунд):

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

2. Конфигурация через Docker Compose с выборочным обновлением

Создайте docker-compose.yml для безопасного обновления только помеченных контейнеров (флаг --label-enable):

version: "3.8"
services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_INCLUDE_RESTARTING=true
      - WATCHTOWER_SCHEDULE=0 0 4 * * *  # Каждый день в 04:00 по cron
      - WATCHTOWER_NOTIFICATIONS=shoutrrr
      - WATCHTOWER_NOTIFICATION_URL=telegram://TOKEN@telegram?channels=CHAT_ID
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  my-app:
    image: my-registry.domain.com/app:latest
    container_name: production_app
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    restart: always

3. Обновление контейнеров с приватных Registry

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

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e REPO_USER="registry_user" \
  -e REPO_PASS="secure_password" \
  containrrr/watchtower --cleanup
💡 Практика специалистов: Никогда не используйте глобальное автообновление для СУБД (PostgreSQL, MySQL). Мажорные апдейты образов могут потребовать ручной миграции файлов баз данных через pg_upgrade, что приведет к аварийной остановке контейнера при перезапуске.

Частые вопросы (FAQ)

Как исключить критический контейнер (например, базу данных) из автообновления?

Добавьте контейнеру лейбл 'com.centurylinklabs.watchtower.enable=false'. Если Watchtower запущен без флага --label-enable, он будет игнорировать контейнеры с этим лейблом.

Что происходит с примонтированными Volumes и сетевыми настройками при обновлении?

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

Полезные материалы
Рекомендуем