Volumes

August 7, 2026 · View on GitHub

The Volumes view lists Docker volumes and — on Business Edition — lets you manage them across the whole swarm. The read-only view is part of the base TUI; listing volumes on all nodes and the create / delete / prune / file-browse actions are license-gated and require a managed context.

Open it from the command bar:

:volume

What you can do depends on two things:

  • License. The volumes-all-nodes entitlement (granted on the be and trial tiers — see License) unlocks cross-node listing and all management actions.
  • Context. Cross-node operations talk to the per-node agents through the RBAC proxy, so they need a managed Docker context (a swarm that has been put through :bootstrap). On a non-managed context the view falls back to the connected node only.

The Volumes view

The list has six columns:

ColumnMeaning
NAMEVolume name.
STACKOwning stack (from the com.docker.stack.namespace label), or -.
DRIVERVolume driver (local, …).
MOUNT POINTOn-disk path of the volume on its node.
CREATEDCreation timestamp.
HOSTThe node the volume lives on.

Navigation and inspection:

KeyAction
/ (k/j)Move cursor
pgup / pgdownPage up / down
i / enterInspect the selected volume (JSON viewer)
/Filter (matches name, stack, driver, mount point, host)
?Full help
esc / qBack

Sort with shift+ the column initial; press the same key again to flip the direction:

KeySort by
shift+nName
shift+sStack
shift+dDriver
shift+cCreated
shift+hHost

Scope: connected node vs. all nodes

Without the license, the view lists volumes on the connected node only and shows a footer hint:

Connected node only · listing volumes on all nodes is a Business Edition feature: …

With volumes-all-nodes licensed on a managed context, the view aggregates volumes from every node in the swarm (the HOST column tells you where each one lives). Two degraded states surface as a non-fatal banner rather than an error:

  • Not bootstrapped (licensed, but the context has no managed proxy): Connected node only · cross-node volume management needs :bootstrap.
  • Some nodes unreachable: the reachable volumes are still listed, with an "N nodes unreachable" banner — the listing degrades, it does not fail.

Managing volumes

The management actions are license-gated. On an unlicensed or non-managed context the keys still exist but open a "Business Edition feature" dialog instead of acting.

KeyAction
cCreate a volume
bBrowse files in the selected volume
ctrl+dDelete the selected volume
pPrune unused volumes

Create (c)

Opens a form with a Name field and a Node picker (the swarm's nodes). tab cycles focus, the arrow keys choose the node, enter creates, esc cancels. Volumes are created with the local driver.

Delete (ctrl+d)

Asks for confirmation — Delete volume '<name>' on <host>? This cannot be undone. — then removes the volume on its node. y/enter confirms, n/esc cancels. Deleting a volume that is still mounted by a container fails with an "in use" error; stop the consumer first.

Prune (p)

Removes unused volumes (docker volume prune --all). Pick a single node, or toggle Prune all nodes with space to run it across the whole swarm. After confirming, the result dialog reports how many volumes were deleted, how much space was reclaimed, and any per-node errors.

Browse files (b)

Opens an in-volume file browser rooted at the volume's contents:

KeyAction
/ (k/j)Move cursor
enter / Enter directory / select file
p / backspace / Up to parent directory
rRename the selected entry
ctrl+d / deleteDelete the selected entry
dDownload to your local machine
uUpload from your local machine
escBack

Download (d) streams the selected entry to a local path: a file is written raw, a directory as a .tar. The transfer streams with live progress, refuses to overwrite an existing destination, and writes to a temporary file that is atomically renamed on success.

Upload (u) is the inverse — it opens a local file browser (a [Upload this directory] row selects the directory you are browsing). A file is sent raw into the current directory; a directory is packed and unpacked under it. Uploads are capped by the agent's FILEOP_MAX_UPLOAD_BYTES (default 2 GiB); exceeding it returns 413. Operators change the ceiling in the bootstrap stack and redeploy — see Configuration.

File operations run inside a short-lived, network-isolated helper container scoped to the target volume; they do not run on the agent host's filesystem.

How cross-node access works

Volume operations travel over the same authenticated, authorized path as the other Business Edition features: swarmcli asks the RBAC proxy, the proxy checks your role, and the request reaches the node holding the volume.

Listing is aggregated across every node, so you see the whole swarm's volumes in one view; every other operation is addressed to the node you selected. A node that is unreachable is reported as such rather than silently omitted.

Permissions and gating

volumes-all-nodes is granted on the be and trial tiers (see License — Model). When it is off — no license, an expired or wrong-swarm license, or a non-managed context — the view shows the read-only connected-node listing and the management keys open the "Business Edition feature" dialog. Role-based access to the underlying calls is enforced centrally by the RBAC proxy; see RBAC.

Failure modes

What you seeCause
"Business Edition feature" dialog on c/b/ctrl+d/pNo volumes-all-nodes entitlement, or a non-managed context. Open :license, or switch to a bootstrapped context.
Connected node only · cross-node volume management needs :bootstrapLicensed, but the active context has no managed proxy. Run :bootstrap.
"N nodes unreachable" bannerSome agents did not answer in time; the listing shows the reachable nodes. Check :bootstrap --check.
Delete fails with an "in use" errorThe volume is still mounted by a running container. Remove or stop the consumer, then retry.
upload exceeds the maximum size of <N> bytes (413)The upload is larger than FILEOP_MAX_UPLOAD_BYTES. Raise the limit in the bootstrap stack and redeploy, or split the upload.