Schedule icon
Script icon
Docker icon
If icon
SlackIncomingWebhook icon
Exit icon
ChatCompletion icon
Anthropic icon
Pause icon
Set icon
Loop icon
Sequential icon
Tag icon
Run icon
Pull icon
Compose icon
Fail icon

Docker Compose Update Manager with AI Release-Note Review, Approval, Volume Backup and Health-Gated Rollback

Update Docker Compose services safely with Kestra. AI reviews release notes, a person approves, volumes are backed up, and failed updates roll back.

Categories
AIInfrastructure

Watchtower, the usual way to auto-update self-hosted containers, was archived in December 2025 and doesn't work with Docker Engine 29+. Updating by hand means checking every image, reading changelogs, and hoping nothing breaks. This flow finds new images for the same tags, explains what changed, and updates only what you approve, with a backup and an automatic rollback.

How it works

  1. daily_check (Schedule) starts a run each morning; runs queue behind an open decision.
  2. discover compares each running service's image digest with its registry, without pulling, and collects the GitHub releases in between from the image's OCI labels. An unreachable registry is reported and retried tomorrow.
  3. review_notes (ChatCompletion) lists breaking changes and required actions. check_review keeps only claims quoted from the notes, and post_digest posts them to Slack.
  4. approve (Pause) lets you pick updates to apply and updates to decline until a newer image.
  5. update_services (Loop, one service at a time) tags the running image for rollback (docker.cli.Tag), backs up named volumes (docker.cli.Run), pulls the reviewed digest (docker.cli.Pull), recreates only that service (docker.cli.Compose) and waits until it's healthy.
  6. If it isn't, the service's errors branch restores the previous image and checks it again. report posts what was updated, what rolled back and why.

What you get

  • Updates reviewed by a person, with release-note risks backed by quotes.
  • Exact rollback to the image that was running, even if the registry deleted it.
  • Volume backups before each update; declined images wait for a newer one.

Who it's for

  • Self-hosters, small companies and agencies running apps with Docker Compose.

Why orchestrate this with Kestra

Every step is visible and retried, the decision is a form, state lives in the KV store, and one failed service never stops the others.

Prerequisites

  • Kestra with access to the Docker socket and volume-enabled: true for the Docker task runner.
  • Compose files under stacks_root, mounted at the same path in task containers. Set projects to the Compose projects to manage. Containers labelled kestra.update=false and Kestra itself are never updated.

Secrets

  • ANTHROPIC_API_KEY: reviews release notes.
  • SLACK_WEBHOOK_URL: digest, report and failure alerts.

Quick start

  1. Set projects, stacks_root, backup_dir and optional health_urls.
  2. Run with dry_run: true to see the digest without changes.
  3. Run again, approve one low-risk update, then enable daily_check.

Outputs: {{ outputs.updates_found }}, {{ outputs.updated }} and {{ outputs.rolled_back }}.

How to extend

  • Add credentials to docker.cli.Pull for private registries.
  • Send the report to Teams or email instead of Slack.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.