The swarm and its volumes, back where they came from.
The definition of the swarm as a zip, and a volume on its node as a .tar.gz. By hand, or daily or weekly, to a folder, an SFTP server or an S3 bucket, encrypted if you like. A restore lists what it will create. And per node, which volumes there are, how big they are and who uses them.
What you can do
Swarm backup
Services, overlay networks, configs with their content, secrets without their content (the API never returns it) and node labels. Optionally with the stack files folder and its .env files.
Volume backup
One volume on one node, read through the Docker context of that node by a helper container that never starts.
Paused while copied
For a database, let the app pause the containers that use the volume while it is copied; the swarm still counts paused tasks as running.
On a schedule
Make a backup by hand, or daily or weekly at a set time, and keep the last n. A scheduled backup runs while the app runs, also from the notification area; when the app was off at that time, it runs once when the app starts. One that fails sends a notification.
Off this computer
A folder on this computer, an SFTP server or NAS (password or key, with the fingerprint of the server confirmed the first time), or an S3-compatible bucket: AWS, Backblaze B2, Wasabi, MinIO. A backup is written and checked here first, then sent; keeping the last n there only removes backups the app sent itself.
Encrypted with age
Per job, with age and one backup password that the app stores with DPAPI. An encrypted backup also opens with age -d; without the password it cannot be restored.
Restore the swarm
The app lists what is missing from the swarm of the active context and creates only what you tick; what is there stays as it is. A secret needs its value again. This also works into another swarm.
Restore a volume
The files in the backup overwrite the same files in the volume, and other files stay. A volume that no longer exists is created.
Volumes per node
Volumes in the sidebar: the volumes of every node, read through its Docker context, with their driver, size (as docker system df counts it), the stack they belong to and the services or containers that use them. Anonymous volumes are one tick away, and so are volumes outside the swarm: of a Compose project, or used only by standalone containers. A node that is down is named above the list; the app does not wait for it.
Remove an unused volume
Remove a volume that no container uses, not even a stopped one; otherwise the app says which containers still use it. Back up opens New backup with that node and volume already chosen.
A database
Back up the volume first, then upgrade.
Before you upgrade the Postgres image of db, back up the volume db-data on node-1 with its containers paused, then roll out. If the new version does not start, roll back the service and restore the volume.
Volumes
Which volume lives where, and how big it is.
A volume belongs to one node: the same name on two nodes is two volumes, and docker volume ls only shows the node you are connected to. The Volumes page reads every node through its Docker context, so you see per node what is there, how much room it takes, and what nothing uses any more.
Keep it private
A swarm backup holds your configs.
A swarm backup contains the content of your configs and, with stack files, your .env files. Keep the folder somewhere private, or encrypt the backup.
All features