39 lines
972 B
Bash
39 lines
972 B
Bash
#!/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
|