#!/bin/bash set -euo pipefail PROJECT_NAME=$(basename "$(pwd)") echo "📦 Docker Compose project: $PROJECT_NAME" # Get all named volumes for this project VOLUMES=$(docker volume ls --format '{{.Name}}' | grep "^${PROJECT_NAME}_") if [[ -z "$VOLUMES" ]]; then echo "❌ No volumes found for project '$PROJECT_NAME'" exit 1 fi for FULL_VOL in $VOLUMES; do SHORT_VOL="${FULL_VOL#${PROJECT_NAME}_}" VOLUME_PATH="/var/lib/docker/volumes/${FULL_VOL}/_data" OUTPUT_FILE="${SHORT_VOL}.tar.gz" echo "📁 Found volume: $SHORT_VOL" read -rp "→ Backup this volume to ${OUTPUT_FILE}? (Y/n) " REPLY REPLY=${REPLY:-Y} if [[ "$REPLY" =~ ^[Yy]$ ]]; then if [[ ! -d "$VOLUME_PATH" ]]; then echo "⚠️ Volume path not found: $VOLUME_PATH" continue fi echo "📦 Backing up $VOLUME_PATH → $OUTPUT_FILE" sudo tar -czf "$OUTPUT_FILE" -C "$VOLUME_PATH" . echo "✅ Done." else echo "⏭️ Skipped $SHORT_VOL" fi done