Skip to content

DockupBackups that live next to your data

One container per host. Every volume declares its own backup policy with labels — destinations, keys and schedules stay in one place.

A Docker volume labelled for backup

Thirty seconds to a first backup ​

yaml
# compose.yaml
services:
  app:
    image: ghcr.io/example/app
    volumes:
      - appdata:/var/lib/app

  dockup:
    image: gitea.vladfaust.com/vladfaust/dockup:latest
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockup-state:/var/lib/dockup
      - ./dockup.yml:/etc/dockup/dockup.yml:ro
      - ./backups:/backups

volumes:
  appdata:
    labels:
      dockup.enable: "true"
      dockup.schedule: daily
      dockup.target: nas
      dockup.keep-daily: "7"
  dockup-state:
yaml
# dockup.yml
targets:
  nas:
    type: local
    path: /backups

That is the whole setup. The volume is discovered, archived on schedule, uploaded and pruned. Volumes created after Dockup started are picked up automatically.

Inspect before you trust ​

console
$ docker compose run --rm dockup plan
KIND    SOURCE     SCHEDULE           NEXT RUN            TARGETS  RETENTION     ENCRYPT  STOP
volume  appdata    daily (23 3 * * *) 2026-11-03T03:23Z   nas      last=7        no       -

$ docker compose run --rm dockup backup --dry-run
$ docker compose run --rm dockup status --history 5

plan reads the Docker daemon and prints the resolved policy without touching anything. backup --dry-run shows the exact object keys a run would create. status merges the live plan with the recorded history and works even when Docker is unreachable.

Where to go next ​

Getting started — a full compose file, the configuration file, and the first restore.

Labels — every dockup.* label on volumes and containers, with types and defaults.

Configuration — targets, schedules, encryption, hooks, notifications and environment overrides.

Operations — manual runs, listing, restoring, retention semantics, monitoring and disaster recovery.

Architecture — helper containers, the data path, and why retention buckets by timestamp.

Recipes — PostgreSQL, Nextcloud, offsite S3, and restoring onto a new host.

Released under the Mozilla Public License 2.0.