Watchtower закрылся. Те, кто держал Docker-контейнеры актуальными через этот инструмент, оказались перед вопросом: что теперь?
Автообновление образов — базовая операционная потребность, и Docker её так и не решили нативно. Всегда нужен был сторонний инструмент. Podman подошёл к этому иначе: обновления и откаты встроены в платформу, никаких демонов-мониторов, никаких внешних утилит.
Основа механизма — команда
podman auto-update. Она проверяет контейнеры с нужным лейблом и обновляет их, если в реестре появился новый образ. Чтобы контейнер участвовал в автообновлениях, ему нужен лейбл
io.containers.autoupdate. Значение registry сравнивает дайджесты образов с реестром, local проверяет локально собранные образы.Лейбл задаётся при создании контейнера:
podman run -d --name my-service \
--label "io.containers.autoupdate=registry" \
docker.io/library/nginx:latest
В Quadlet-файле достаточно одной строки в секции [Container]:
AutoUpdate=registry
Само обновление запускается через systemd-таймер. Включается он одной командой:
systemctl --user enable --now podman-auto-update.timer
Пример конфига для обновлений каждый понедельник в 3:30 ночи:
[Timer]
OnCalendar=Mon *-*-* 03:30:00
RandomizedDelaySec=30m
Перед тем как писать выражение для
OnCalendar, стоит проверить его через systemd-analyze calendar — он сразу покажет следующее время срабатывания и не даст ошибиться с форматом.Podman не угадывает проблемы заранее, он реагирует. Последовательность такая: тянет новый образ, перезапускает сервис, смотрит, запустился ли контейнер. Не запустился — возвращает предыдущий образ.
Для этого нужно три условия:
• контейнер управляется через systemd
• флаг
--rollback включён• systemd может понять, что контейнер сломан.
Самый надёжный способ это обеспечить — health check с sdnotify. Контейнер сам сигналит systemd о готовности. Если сигнал не пришёл за отведённое время, systemd фиксирует сбой и Podman откатывается.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#root_prompt
