Persistent volumes
By default a DollarBox container has only the ephemeral disk that comes with the pod. If the container restarts or you change its image, anything written to that disk is lost. Persistent volumes give you real block storage that survives restarts and can be detached from one container and attached to another.
Pricing
€0.10 per GB per month, pro-rated. Capacity is pre-paid: you buy a pool of GB up front, and then carve volumes from it. The pool can be grown or shrunk at any time.
You only pay for the pool size, not the number of volumes. A 50 GB pool costs €5/month whether you split it into one 50 GB volume or ten 5 GB volumes.
How the pool works
- Buy capacity before creating any volumes. The control panel won't let you create a volume that's larger than your remaining unused pool.
- Grow the pool any time. Stripe charges the difference, pro-rated for the rest of the billing period.
- Shrink the pool down to the floor of currently-provisioned volumes. Shrinks take effect at the end of the current billing period (no refund).
- Delete a volume to free the GB back into the pool. The data is destroyed.
Creating a volume
- Buy capacity at Volumes → Manage capacity in the control panel.
- Go to Volumes → New volume and enter a name and size in GB.
- The volume status moves from
pending→provisioning→bound. Binding is fast (a few seconds) and the underlying Hetzner block-storage volume is created automatically.
Attaching to a container
When you create or edit a container, pick a volume from the Persistent volume dropdown and enter a Mount path (e.g. /data). The container's files at that path will persist across restarts.
Only unattached volumes appear in the dropdown — each volume can be attached to at most one container at a time (the underlying access mode is ReadWriteOnce).
Detaching and moving a volume
- Edit the container and set the volume back to "No volume".
- Restart the container so the new spec rolls out.
- The volume becomes selectable on any other container in the same org.
The data on the volume is untouched.
Limitations
- ReadWriteOnce: one container at a time.
- Zonal: a volume lives in the same Hetzner location as the cluster. We don't yet support cross-zone migrations.
- Per-volume size cap: 100 GB by default. Contact support if you need a single larger volume.
- Per-org pool cap: 500 GB by default.
- Delete is permanent: removing a volume from the control panel destroys the underlying block-storage volume.
kubectl mode
Tenants in kubectl mode can request volumes themselves:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data
spec:
accessModes: [ReadWriteOnce]
storageClassName: hcloud-volumes
resources:
requests:
storage: 5Gi
The same pool capacity applies — your org must have unused GB in the pre-paid pool, or the PVC will be rejected by the namespace ResourceQuota.