DockerRescueKit (DRK) is a self-hosted backup and restore service for Docker containers, volumes, and images. It runs as a single container, exposes a web dashboard plus REST API, and ships scheduled backups to pluggable storage adapters (local, S3, SMB, SFTP, rclone, restic, Proxmox Backup Server).
- Velero is Kubernetes-native; DRK targets plain Docker / Compose hosts where Velero is overkill.
- Duplicati is a generic file backup tool — it has no knowledge
of Docker. You'd have to script
docker stop / dump / startaround it. DRK does that orchestration for you and stores the manifest needed to reconstruct the runtime. - restic is a building block. DRK can use restic as a storage adapter, but adds the policy, scheduler, retention, verify, and restore UX on top.
Pluggable. The adapters shipped in v1.0:
local://— bind-mounted directory on the host or a NAS mounts3://— any S3-compatible endpoint (AWS, Backblaze B2, MinIO, Wasabi, Garage, …)smb://— Windows / Samba sharessftp://— any SSH hostrclone://— anything rclone supports (Google Drive, Dropbox, Mega, OneDrive, …)restic://— restic-managed repositories (deduped, encrypted)pbs://— Proxmox Backup Server
You can attach multiple destinations to a single policy for redundancy.
Yes, with the usual caveats. DRK uses Docker's snapshot semantics:
the container is paused (docker pause) for the volume copy, then
resumed. For databases that don't tolerate fsync gaps, attach a
pre_backup hook to run pg_dump / mongodump / etc. into a
sidecar volume, and a post_backup hook to clean it up.
For containers using a copy-on-write filesystem (overlay2 default), the pause is millisecond-scale. Network-attached storage backends may be slower.
Yes. The backup manifest is portable — it captures container metadata (image tag, env, volumes, networks, restart policy) along with the volume bytes. To restore on a new host:
- Install DRK on the new host.
- Mount the same storage adapter (or copy the backup files locally).
- Use the dashboard's "Restore" action or
drk restore <backup-id>.
The only requirement is that the destination host can pull the referenced images and reach the storage adapter.
Hit the POST /api/settings/regenerate-api-key endpoint with the
current key, or use the CLI shortcut from the repo root:
make keyThe old key is invalidated immediately. The new key is written to
/data/secrets.json inside the container and echoed once to stdout.
Yes. DockerRescueKit is source-available under the Zippy Technologies Source-Available Commercial License. Personal and educational use is free within the documented limits (5 policies, 14-day audit log). Pro and Enterprise tiers unlock unlimited policies, longer audit retention, notifications, and additional features. See docs/ROADMAP.md for the current tier table.
Partially — and honestly, it depends on how the agent is wired up.
What Prune Guard does (experimental, DRK_PRUNE_GUARD=1):
- Periodic safety floor (default, zero-config): DRK snapshots your named volumes on a cron (default every 6 hours). If a prune destroys them, the undo toast points you at the most recent floor snapshot. The floor is always stale by up to one cron interval, but it's non-zero recoverability with nothing to configure.
- MCP server (
drk-mcp): For AI agents that support MCP (Claude, Cursor, etc.), thedrk-mcpserver exposes asafe_prunetool that snapshots target volumes before pruning them. A cooperative agent callingsafe_pruneinstead of rawdocker system prunegets a genuine pre-prune snapshot and a one-click undo.
What it cannot do (§7 of the Prune Guard spec — read this):
- A rogue or jailbroken agent calling the Docker socket directly bypasses MCP entirely. The periodic floor is the only recovery in that scenario.
docker volume rm/volume prunevia the raw API cannot be intercepted in the v1.4 MVP — by the time thevolume destroyevent fires, the data is already gone. The floor snapshot may be hours old.- Volumes over the per-volume cap (default 512 MB) are skipped with a warning; very large volumes should be protected by a scheduled DRK backup policy instead.
- Bind mounts and host directories are out of scope — DRK snapshots named Docker volumes only.
Phase 2 (planned post-v1.4): a socket proxy (drk-guard-proxy) that agents
and CLI tools are pointed at instead of the real Docker socket, giving genuine
pre-op intercept for all clients — including raw-API callers. See
docs/PRUNE_GUARD_GUIDE.md for the full picture.
Yes, and it is live on Docker Hub. Install it from the Docker Desktop Marketplace or via:
docker extension install gozippy/dockerrescuekit:latestThe extension uses the socket transport to communicate with the DRK
backend container and gives you the full dashboard, policy editor,
restore wizard, rehearsals, and (in v1.4+, with DRK_PRUNE_GUARD=1)
the Prune Guard panel.
See CONTRIBUTING.md. The short version:
issues and PRs welcome, run npm test -ws before opening a PR,
and keep storage adapters self-contained (one file under
packages/backend/src/services/storage/adapters/).
Please do not open a public issue. See
SECURITY.md for the disclosure process and the
contact address. We acknowledge within 48 hours and aim for a
patched release within 7 days for any pre-auth or RCE-class report.