Автоматическое обновление контейнеров с помощью Watchtower в Docker
- Необходимость вручную отслеживать и обновлять десятки запущенных 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 864002. Конфигурация через 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: always3. Обновление контейнеров с приватных 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 Частые вопросы (FAQ)
Как исключить критический контейнер (например, базу данных) из автообновления?
Добавьте контейнеру лейбл 'com.centurylinklabs.watchtower.enable=false'. Если Watchtower запущен без флага --label-enable, он будет игнорировать контейнеры с этим лейблом.
Что происходит с примонтированными Volumes и сетевыми настройками при обновлении?
Watchtower отправляет сигнал SIGTERM старому контейнеру, скачивает новый образ и пересоздает контейнер с сохранением тех же аргументов запуска, линков, переменных среды и точек монтирования томов.