Preview: the mounts API is new. Endpoints, request shape, and SDK
method names may change before GA. Backend coverage is rclone’s — works
for the listed providers today; expect rough edges on less-tested
backends.
How It Works
Mounts userclone mount under
the hood — a single binary that speaks ~40 backends (S3, GCS, Azure Blob,
SFTP, WebDAV, Dropbox, and more). When you call mounts.add():
- The control plane templates an rclone config from your
backend+creds. - The config is written to a tmpfs file inside the VM (mode
0600— the sandbox user can’t read it). rclone mountis spawned as a background daemon, exposing the remote at the path you specified.- Every process in the sandbox can now read/write that path.
Supported Backends
backend selects how creds are templated. The keys you pass map directly to
rclone config fields for that backend type.
| Backend | Common keys |
|---|---|
s3 | access_key_id, secret_access_key, region, provider (default AWS), endpoint |
gcs | service_account_credentials (JSON string) or service_account_file |
azureblob | account, key or sas_url |
sftp | host, user, pass or key_file, port |
webdav | url, vendor, user, pass |
dropbox | token |
rcloneConfig
directly with a raw rclone config string — see Custom Config
below.
Examples
S3 (AWS)
S3-compatible (MinIO, R2, Tigris, etc.)
Override theprovider and point at the endpoint:
Google Cloud Storage
SFTP
Custom Config
For backends not in the typed list — or to tune things like--vfs-cache-mode
or --dir-cache-time — pass an rclone config string directly. The section
name in the config must match the part of remote before the colon.
Read-only by default
Mounts are read-only unless you explicitly opt into read-write:Listing and removing
Hibernate behavior
Mounts survive hibernate/wake transparently. The VM snapshot captures the live FUSE mount and the rclone daemon process; when the sandbox wakes, both are restored as-is. No re-mount call needed — the mount is exactly where you left it, with the same credentials, serving the same path.remove() explicitly:
fusermount3 -u in the VM and drops the registry
entry. No magic teardown on hibernate.
Stale credentials
If the credentials behind a mount get rotated or revoked while the sandbox is hibernated, the in-VM rclone daemon — restored intact from the snapshot — is still holding the old keys and will start hitting auth errors on the next request. Fix:mounts.remove(path) then mounts.add(...) again with fresh
credentials.
CLI
--config-file at a local file:
Troubleshooting
sandbox image is missing rclone and/or fusermount3 — the sandbox is
running on an older base image. Recreate the sandbox from the latest default
template or build a new image off the current Dockerfile.default.
Mount succeeds but ls returns empty — usually a creds / permission issue
on the remote side rather than a mount issue. SSH in (oc shell) and run
rclone ls <remote>: --config /run/oc-agent/mounts/<id>.conf to see the real
error. Or just ls -la the mount point — FUSE errors surface as filesystem
errors there.
fuse: bad mount point ... permission denied — make sure the target path
isn’t already a non-empty directory you don’t own. The mount call creates the
path with sandbox:sandbox ownership; pre-existing roots can conflict.