Image updates
WUD (What’s Up Docker) watches your running containers and applies a hybrid policy in production. When you push to the api or ui, new GHCR tags are auto-pulled and deployed. Base services like Postgres, Valkey, and Traefik only generate notifications so you can review release notes before updating.
How WUD reads container labels
Section titled “How WUD reads container labels”WUD checks the labels in your compose files to decide which images to auto-update and which to notify-only. In docker-compose.yml, labels like this control the behavior:
services: api: image: ghcr.io/your-org/your-fork-api:latest labels: wud.trigger: dockerThe wud.trigger: docker label tells WUD to watch this image and auto-recreate the container when a new tag is published. Without this label, WUD reports updates but doesn’t recreate.
Add optional notification channels to compose/.env:
# DiscordWUD_DISCORD_WEBHOOK=https://discord.com/api/webhooks/...
# SlackWUD_SLACK_BOT_TOKEN=xoxb-...WUD_SLACK_CHANNEL=docker-updatesFor private GHCR images:
WUD_GHCR_USERNAME=your-gh-usernameWUD_GHCR_TOKEN=ghp_xxxOverride the check schedule if needed:
WUD_SCHEDULE="0 */6 * * *" # every 6 hours instead of the defaultBoot production:
STACK=prod ./scripts/compose-up.shWUD will start. Access the dashboard at http://<vps-ip>:3033/ or http://localhost:3033/ if you’re on the VPS.
Hybrid policy explained
Section titled “Hybrid policy explained”App images (api, ui):
- Labeled with
wud.trigger: dockerin the compose file. - WUD auto-pulls new
:latesttags and recreates containers. - No downtime (rolling restart during the pull).
Base images (postgres, valkey, traefik):
- No trigger label, or labeled differently.
- WUD reports available updates on the dashboard and via notifications.
- You read release notes, take backups (especially for Postgres), then update manually.
Manual base-image updates:
When you decide to upgrade Postgres or Traefik:
- Take a backup (see Backups).
- Edit the pinned tag in
infra/compose/compose/docker-compose.yml:
postgres: image: postgres:17.1 # was postgres:17.0- Recreate the service:
docker compose pull postgresdocker compose up -d postgres- Check the logs:
docker compose logs postgres | tail -20Notifications
Section titled “Notifications”Dashboard at :3033 always works. Slack and Discord integration is optional; enable only the channels you want. WUD delivers notifications for:
- New app image tags (auto-deploying).
- New base image tags (notify-only, for you to review).
- Failed check runs (network issues, etc.).
Disable WUD
Section titled “Disable WUD”If you don’t want automatic app deployments:
WITH_WUD=0 STACK=prod ./scripts/compose-up.shThen manually trigger updates with:
docker compose pull api uidocker compose up -d api uiRelated
Section titled “Related”- Deployment - the production workflow WUD fits into.
- Backups - how to snapshot before upgrading Postgres.
- Profiles & overlays - how
WITH_WUD=1works.