Skip to main content

External Docker volumes

This article refers to Platform v3.1.0. The current Platform version is v3.2.0.

Overview

An external volume is a Docker-managed volume that exists independently of any compose stack. You create it once — manually, with docker volume create locally or via the Docker Volumes card on a Barbara edge node — and several different apps can mount it. This makes external volumes the natural choice for data shared between independent apps, or data that must outlive the app that wrote it.

Video walkthrough

Watch this step on YouTube: Persistent Folders — External Volumes.

Internal vs external volumes

FeatureInternal volumesExternal volumes
Created byCompose / docker run automaticallyManually with docker volume create, or via the Barbara Docker Volumes card
Managed by Docker
Must exist before the stack starts
Best forStorage for a single appStorage shared between apps or outliving any single app

Pick internal volumes when only one stack ever touches the data; pick external volumes when several do.

Compose syntax

version: "3.9"

services:
filebrowser:
image: filebrowser/filebrowser
container_name: filebrowser
ports:
- "8080:80"
volumes:
- my_external_volume:/srv
restart: unless-stopped

volumes:
my_external_volume:
external: true
name: my_external_volume
  • The external: true flag tells Compose the volume already exists and not to create it.
  • The volume must already be defined on the host before docker-compose up runs.

Practice 1 — external volume locally

1. Create the volume

docker volume create my_external_volume
docker volume ls

2. Write the compose file

Same as the snippet above. Save it as docker-compose.yaml.

3. Start the stack

docker-compose up -d

4. Use Filebrowser

Open http://localhost:8080. Files you upload land in my_external_volume.

🔑 Default Filebrowser credentials are admin / admin — you can change them under Settings → Users.

5. Inspect the volume

docker volume inspect my_external_volume

6. Tear it down

docker-compose down

The volume stays even after the stack is down. To remove it:

docker volume rm my_external_volume
warning

You must stop every container that mounts the volume before you can delete it.

Practice 2 — external volume on a Barbara edge node

The Barbara workflow is the same idea, with Panel surfaces taking the role of the CLI commands.

1. Zip the compose file

zip -r filebrowser_app.zip ./

2. Upload to the App Library

In Barbara Panel, open the App Library, create a Docker application named filebrowser if it does not exist, and upload filebrowser_app.zip as a new version.

3. Create the external volume on the node

On the Node Details page, open the Docker Volumes card and click the + action. Name the volume my_external_volume. See Docker Volumes for the full reference of the card.

4. Deploy the app

On the Node Details page, click Add card → Application and pick filebrowser. Compose finds the pre-existing external volume and mounts it.

5. Use the app

Open http://<NODE_IP>:8080. Upload some files.

6. Verify persistence

Stop the workload from its card, then start it again. The data stays.

7. Tear it down

Uninstall the app from its workload card. Then go back to the Docker Volumes card and delete my_external_volume — only then is the data actually gone.

Summary

External volumes are the right choice when several apps need to read or write the same data, or when the data must outlive any single app. They cost one extra step at creation time but make ownership of the data explicit and independent of the apps that use it.