---
title: "Docker Volumes"
sidebar_label: "Volumes"
description: "Inspect, create, and prune the Docker volumes used by workloads on an edge node from the Docker Volumes card in Barbara Panel."
lastmod: "2026-05-12"
---

import VersionNotice from '@site/src/components/VersionNotice';
import { UpdateInProgressNotice } from '@site/src/components/VersionNotice';

<VersionNotice platformArticleVersion="v3.0.0" />
<!--
<UpdateInProgressNotice />
-->

## Overview

The **Docker Volumes** card on the Node Details page is the operational view of every Docker volume currently known to a node. From here you can see what each volume is mounted into, create new external volumes, and prune ones that are no longer in use.

## Internal vs external volumes

Docker volumes persist data across container restarts and can be shared between containers. Barbara distinguishes two kinds:

* **Internal volumes** — declared by your `docker-compose.yaml`, created automatically by Docker the first time the app starts, and managed by Docker on the host. Use them for data that only the workload needs (logs, application state, …).
* **External volumes** — created by you (manually from this card, or with `docker volume create`). Use them for data that should be shared between containers or that must outlive any single workload.

| Feature | Internal volumes | External volumes |
| --- | --- | --- |
| Created by | Docker | You |
| Location | Docker host | Docker host (or remote) |
| Accessible outside the container | No | Yes |
| Typically used for | Workload-private data | Data shared between containers or persisted independently |

How a compose file behaves depends on the volume kind:

* **Internal volume not yet created** — Docker creates it before starting the workload.
* **Internal volume already exists** — the workload reuses the existing volume and its data.
* **External volume not yet created** — the workload **fails to start**. Create the volume from this card first, or with `docker volume create`.

Internal volumes are **never deleted automatically** when a workload stops; that is what the **prune** actions on this card are for.

## Docker Volumes card UI

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-ui.png').default} alt="Docker Volumes card" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Docker Volumes card
  </figcaption>
</div>

1. **Collapse / Expand** the card.
2. **Hide** the card.
3. **Add** a new external volume.
4. **Prune all** volumes that are not in use.
5. **Status** — *In use* or *Unused*.
6. **Size** of the volume on disk.
7. **Delete** a single volume.
8. **Expand** the volume's details.

### Volume details

Click a volume to expand its details:

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-ui-volume-details.png').default} alt="Volume details" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Volume details
  </figcaption>
</div>

1. **Containers** using the volume.
2. **Target** — path inside each container where the volume is mounted.
3. **More info** — tooltip with the full mapping.

The **More info** tooltip shows, for each consumer:

* The **container** name.
* The **app** that owns the container.
* The **service** within that app.
* The **target** path inside the container.

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-ui-details-tooltip.png').default} alt="More info tooltip" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    More info tooltip
  </figcaption>
</div>

## Add the Docker Volumes card

If the card is not on the Node Details page yet, click **Add card** in the top-right corner.

<div style={{ maxWidth: '260px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-add-card.png').default} alt="Add card menu" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Add card menu
  </figcaption>
</div>

Scroll down and pick **Docker Volumes**.

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-select-volumes-card.png').default} alt="Select Docker Volumes" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Select Docker Volumes
  </figcaption>
</div>

:::tip

If **Docker Volumes** is missing from the menu, the card is already on the page.

:::

## Create an external volume

Click the **+** button.

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-add-external.png').default} alt="Add external volume" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Add external volume
  </figcaption>
</div>

Enter the volume name and click **Send**.

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-add-popup.png').default} alt="Add volume popup" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Add volume popup
  </figcaption>
</div>

The new volume appears immediately on the card.

:::tip

Internal volumes show up on the card automatically — you do not need to create them by hand.

:::

## Delete a single volume

Click the **Delete** icon on a volume's row.

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-delete-one.png').default} alt="Delete a volume" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Delete a volume
  </figcaption>
</div>

:::tip

A volume **in use** cannot be deleted. Stop or uninstall the workload that holds it first.

:::

## Prune all unused volumes

Click **Prune All** in the card header to remove every volume that is not in use.

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-delete-multiple.png').default} alt="Prune all volumes" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Prune all volumes
  </figcaption>
</div>

Confirm in the popup.

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-delete-multiple-popup.png').default} alt="Prune confirmation" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Prune confirmation
  </figcaption>
</div>

Volumes that are currently in use are skipped.

## Hide the card

Click the **Hide** icon at the top-right to remove the card from the Node Details page without losing data. Bring it back via **Add card** as described above.

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-hide-card.png').default} alt="Hide card icon" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Hide card icon
  </figcaption>
</div>

<div style={{ maxWidth: '360px', margin: '2em auto 2em auto', textAlign: 'center' }}>
  <img src={require('./img/volumes-hide-card-popup.png').default} alt="Hide card confirmation" className="shadow-img" />
  <figcaption style={{ fontSize: '0.9em', color: '#666', marginTop: '0.6em'}}>
    Hide card confirmation
  </figcaption>
</div>

## Summary

The **Docker Volumes** card gives you a per-node view of every Docker volume — internal (auto-managed) and external (yours) — with the actions you need to inspect what they are mounted into, create new external ones, delete unused ones, and prune them in bulk.
