Add additional documentation and examples
- Usage examples for different scenarios - Network backup analysis documentation - Restore operation examples and procedures
This commit is contained in:
110
example_usage.md
Normal file
110
example_usage.md
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
# Docker2PBS - Usage Examples
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
chmod +x docker2pbs.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## Basic Usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./docker2pbs.py docker-compose.yml web --pbs-repository user@pbs.example.com:backup-datastore
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dry-run Mode (Testing)
|
||||||
|
|
||||||
|
Use `--dry-run` to see what would be executed without actually performing operations:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./docker2pbs.py docker-compose.yml web \
|
||||||
|
--pbs-repository user@pbs.example.com:backup-datastore \
|
||||||
|
--dry-run
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage with Authentication
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./docker2pbs.py docker-compose.yml database \
|
||||||
|
--pbs-repository user@pbs.example.com:backup-datastore \
|
||||||
|
--pbs-username backup-user \
|
||||||
|
--pbs-password secret123 \
|
||||||
|
--pbs-fingerprint aa:bb:cc:dd:ee:ff...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dry-run with Full Configuration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./docker2pbs.py docker-compose.yml database \
|
||||||
|
--pbs-repository user@pbs.example.com:backup-datastore \
|
||||||
|
--pbs-username backup-user \
|
||||||
|
--pbs-password secret123 \
|
||||||
|
--pbs-fingerprint aa:bb:cc:dd:ee:ff... \
|
||||||
|
--dry-run
|
||||||
|
```
|
||||||
|
|
||||||
|
## Example docker-compose.yml
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
image: nginx:latest
|
||||||
|
volumes:
|
||||||
|
- ./html:/var/www/html
|
||||||
|
- logs_volume:/var/log/nginx
|
||||||
|
networks:
|
||||||
|
- frontend
|
||||||
|
- backend
|
||||||
|
|
||||||
|
database:
|
||||||
|
image: postgres:13
|
||||||
|
volumes:
|
||||||
|
- db_data:/var/lib/postgresql/data
|
||||||
|
- ./backups:/backups
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: secret
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
logs_volume:
|
||||||
|
db_data:
|
||||||
|
external: true
|
||||||
|
|
||||||
|
networks:
|
||||||
|
frontend:
|
||||||
|
backend:
|
||||||
|
external: true
|
||||||
|
```
|
||||||
|
|
||||||
|
## What the Script Does
|
||||||
|
|
||||||
|
1. **Parses docker-compose.yml** - reads service configuration
|
||||||
|
2. **Identifies volumes** - both local and external volumes
|
||||||
|
3. **Identifies networks** - including external networks
|
||||||
|
4. **Stops the service** - using `docker-compose stop`
|
||||||
|
5. **Creates PBS backup** - of all service volumes
|
||||||
|
6. **Restarts the service** - using `docker-compose up -d`
|
||||||
|
|
||||||
|
## Dry-run Mode
|
||||||
|
|
||||||
|
In `--dry-run` mode, the script:
|
||||||
|
- Shows detailed configuration summary
|
||||||
|
- Displays all commands that would be executed
|
||||||
|
- **DOES NOT** stop or start services
|
||||||
|
- **DOES NOT** create actual backups
|
||||||
|
- **DOES NOT** perform any destructive operations
|
||||||
|
|
||||||
|
Perfect for testing configuration before running actual backup.
|
||||||
|
|
||||||
|
## PBS Configuration
|
||||||
|
|
||||||
|
Make sure you have `proxmox-backup-client` installed and configured access to PBS.
|
||||||
|
|
||||||
|
## Supported Volume Types
|
||||||
|
|
||||||
|
- **Bind mounts** - local paths (e.g., `./data:/app/data`)
|
||||||
|
- **Named volumes** - Docker volumes (e.g., `db_data:/var/lib/postgresql/data`)
|
||||||
|
- **External volumes** - externally managed volumes
|
||||||
169
network_backup_analysis.md
Normal file
169
network_backup_analysis.md
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
# Network Configuration Backup Analysis
|
||||||
|
|
||||||
|
## Current State - Networks NOT Backed Up
|
||||||
|
|
||||||
|
The current script only **parses and displays** network information but does **NOT backup or restore** network configurations.
|
||||||
|
|
||||||
|
### What the Script Currently Does with Networks:
|
||||||
|
1. ✅ Parses network configuration from `docker-compose.yml`
|
||||||
|
2. ✅ Identifies external vs internal networks
|
||||||
|
3. ✅ Displays network info in dry-run mode
|
||||||
|
4. ❌ **DOES NOT backup** network configuration
|
||||||
|
5. ❌ **DOES NOT restore** networks during restore process
|
||||||
|
|
||||||
|
## What Should Be Backed Up for Networks
|
||||||
|
|
||||||
|
### Network Configuration Elements:
|
||||||
|
1. **Network Definition** - from `docker-compose.yml`
|
||||||
|
2. **Network Driver** - bridge, overlay, macvlan, etc.
|
||||||
|
3. **Network Options** - IPAM, subnets, gateways
|
||||||
|
4. **External Network References** - which networks are external
|
||||||
|
5. **Service Network Attachments** - which services use which networks
|
||||||
|
|
||||||
|
### Example Network Configurations:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# docker-compose.yml
|
||||||
|
networks:
|
||||||
|
frontend:
|
||||||
|
driver: bridge
|
||||||
|
ipam:
|
||||||
|
driver: default
|
||||||
|
config:
|
||||||
|
- subnet: 172.20.0.0/16
|
||||||
|
gateway: 172.20.0.1
|
||||||
|
|
||||||
|
backend:
|
||||||
|
driver: overlay
|
||||||
|
attachable: true
|
||||||
|
|
||||||
|
external_net:
|
||||||
|
external: true
|
||||||
|
name: existing_network
|
||||||
|
```
|
||||||
|
|
||||||
|
## Proposed Network Backup Strategy
|
||||||
|
|
||||||
|
### Option 1: Backup Network Configuration as Metadata
|
||||||
|
- Create `network_config.json` file with network definitions
|
||||||
|
- Include in backup as separate archive
|
||||||
|
- Restore by recreating networks before starting services
|
||||||
|
|
||||||
|
### Option 2: Export Full Network State
|
||||||
|
- Export actual Docker network inspect data
|
||||||
|
- Include network-specific files/configs if any
|
||||||
|
- More complex but complete solution
|
||||||
|
|
||||||
|
### Option 3: Documentation Only
|
||||||
|
- Create human-readable network documentation
|
||||||
|
- Include required manual steps for network recreation
|
||||||
|
- Simplest but requires manual intervention
|
||||||
|
|
||||||
|
## Implementation Recommendation
|
||||||
|
|
||||||
|
**Recommended: Option 1 - Network Configuration Metadata**
|
||||||
|
|
||||||
|
### Backup Process:
|
||||||
|
1. Extract network config from `docker-compose.yml`
|
||||||
|
2. Get current Docker network state with `docker network inspect`
|
||||||
|
3. Create `network_config.json` with combined information
|
||||||
|
4. Add as `network_config.pxar` archive
|
||||||
|
|
||||||
|
### Restore Process:
|
||||||
|
1. Extract `network_config.pxar`
|
||||||
|
2. Read network configuration
|
||||||
|
3. Create missing networks with `docker network create`
|
||||||
|
4. Skip external networks (assume they exist)
|
||||||
|
5. Start services (they'll connect to recreated networks)
|
||||||
|
|
||||||
|
## Network Restore Challenges
|
||||||
|
|
||||||
|
### External Networks
|
||||||
|
- Cannot be recreated by backup script
|
||||||
|
- Must exist before restore
|
||||||
|
- Should be documented in restore instructions
|
||||||
|
|
||||||
|
### Network Conflicts
|
||||||
|
- Network names might conflict with existing networks
|
||||||
|
- Subnet conflicts possible
|
||||||
|
- Need conflict resolution strategy
|
||||||
|
|
||||||
|
### Service Dependencies
|
||||||
|
- Some services might depend on specific network configurations
|
||||||
|
- Multi-host overlay networks require swarm mode
|
||||||
|
- Custom network drivers might not be available
|
||||||
|
|
||||||
|
## Required Script Modifications
|
||||||
|
|
||||||
|
### 1. Network Backup Function
|
||||||
|
```python
|
||||||
|
def backup_network_config(self) -> str:
|
||||||
|
"""Create network configuration backup"""
|
||||||
|
network_config = {
|
||||||
|
'compose_networks': {}, # From docker-compose.yml
|
||||||
|
'docker_networks': {}, # From docker network inspect
|
||||||
|
'service_attachments': {} # Which networks this service uses
|
||||||
|
}
|
||||||
|
# Implementation needed
|
||||||
|
return config_file_path
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Network Restore Function
|
||||||
|
```python
|
||||||
|
def restore_networks(self, config_path: str) -> None:
|
||||||
|
"""Restore network configuration"""
|
||||||
|
# Read network config
|
||||||
|
# Create missing networks
|
||||||
|
# Skip external networks
|
||||||
|
# Log what was created
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Integration Points
|
||||||
|
- Add network backup to main backup process
|
||||||
|
- Add network restore to restore documentation
|
||||||
|
- Handle network creation before service start
|
||||||
|
|
||||||
|
## Current Workaround
|
||||||
|
|
||||||
|
Until network backup is implemented, users must:
|
||||||
|
|
||||||
|
1. **Document networks manually**:
|
||||||
|
```bash
|
||||||
|
# Export current network config
|
||||||
|
docker network ls --format "table {{.Name}}\t{{.Driver}}\t{{.Scope}}"
|
||||||
|
|
||||||
|
# Export network details
|
||||||
|
docker network inspect network_name > network_name_config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Recreate networks manually**:
|
||||||
|
```bash
|
||||||
|
# Create bridge network
|
||||||
|
docker network create --driver bridge \
|
||||||
|
--subnet=172.20.0.0/16 \
|
||||||
|
--gateway=172.20.0.1 \
|
||||||
|
frontend
|
||||||
|
|
||||||
|
# Create overlay network
|
||||||
|
docker network create --driver overlay \
|
||||||
|
--attachable \
|
||||||
|
backend
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Use external networks where possible**:
|
||||||
|
```yaml
|
||||||
|
networks:
|
||||||
|
my_network:
|
||||||
|
external: true
|
||||||
|
name: existing_network
|
||||||
|
```
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
The current script has a **significant gap** - it doesn't backup or restore network configurations. This means:
|
||||||
|
|
||||||
|
- Services might fail to start after restore if networks don't exist
|
||||||
|
- Network-specific configurations (subnets, drivers, options) are lost
|
||||||
|
- Manual network recreation is required for complete restore
|
||||||
|
|
||||||
|
This should be addressed in a future version of the script.
|
||||||
279
restore_example.md
Normal file
279
restore_example.md
Normal file
@@ -0,0 +1,279 @@
|
|||||||
|
# Docker2PBS Backup Restore Guide
|
||||||
|
|
||||||
|
## Backup Format
|
||||||
|
|
||||||
|
The script creates **separate .pxar archives for each volume** of the service:
|
||||||
|
|
||||||
|
- `volume_db_data.pxar` - for named volumes
|
||||||
|
- `bind_dot_html.pxar` - for bind mounts (paths converted to safe names)
|
||||||
|
- `bind_dot_backups.pxar` - for other bind mounts
|
||||||
|
|
||||||
|
## How to Restore Backups
|
||||||
|
|
||||||
|
### 1. List Available Backups
|
||||||
|
```bash
|
||||||
|
proxmox-backup-client list --repository user@pbs.example.com:backup-datastore
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Inspect Specific Backup Contents
|
||||||
|
```bash
|
||||||
|
proxmox-backup-client catalog \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Selective Volume Restoration
|
||||||
|
|
||||||
|
#### Restore Docker Volume
|
||||||
|
```bash
|
||||||
|
proxmox-backup-client restore \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45 \
|
||||||
|
volume_db_data.pxar /var/lib/docker/volumes/db_data/_data
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Restore Bind Mount
|
||||||
|
```bash
|
||||||
|
proxmox-backup-client restore \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45 \
|
||||||
|
bind_dot_html.pxar ./html
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Restore All Archives at Once
|
||||||
|
```bash
|
||||||
|
# Example script to restore all volumes
|
||||||
|
for archive in volume_db_data.pxar bind_dot_html.pxar bind_dot_backups.pxar; do
|
||||||
|
echo "Restoring $archive..."
|
||||||
|
proxmox-backup-client restore \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45 \
|
||||||
|
"$archive" "/tmp/restore/$archive/"
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
## Archive Naming Convention
|
||||||
|
|
||||||
|
The script automatically generates archive names:
|
||||||
|
|
||||||
|
| Volume Type | Source Example | Archive Name |
|
||||||
|
|-------------|----------------|--------------|
|
||||||
|
| Named volume | `db_data` | `volume_db_data.pxar` |
|
||||||
|
| Bind mount | `./html` | `bind_dot_html.pxar` |
|
||||||
|
| Bind mount | `/app/data` | `bind__app_data.pxar` |
|
||||||
|
| Bind mount | `../config` | `bind_dotdot_config.pxar` |
|
||||||
|
|
||||||
|
## Benefits of This Approach
|
||||||
|
|
||||||
|
1. **Selective Restoration** - restore only specific volumes
|
||||||
|
2. **Clear Structure** - each volume has its own descriptive archive name
|
||||||
|
3. **Easy Management** - inspect contents of specific volumes
|
||||||
|
4. **Safer Operations** - lower risk of overwriting unwanted files
|
||||||
|
5. **Flexible Restore** - restore data to different locations
|
||||||
|
|
||||||
|
## Inspect Archive Contents
|
||||||
|
```bash
|
||||||
|
proxmox-backup-client catalog \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45 \
|
||||||
|
volume_db_data.pxar
|
||||||
|
```
|
||||||
|
|
||||||
|
## Complete Restore Workflow
|
||||||
|
|
||||||
|
### 1. Stop the Service
|
||||||
|
```bash
|
||||||
|
docker-compose stop service_name
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. List Available Backups
|
||||||
|
```bash
|
||||||
|
proxmox-backup-client list --repository user@pbs.example.com:backup-datastore
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Inspect Backup Contents
|
||||||
|
```bash
|
||||||
|
proxmox-backup-client catalog \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Restore Specific Volumes
|
||||||
|
```bash
|
||||||
|
# Restore Docker volume
|
||||||
|
proxmox-backup-client restore \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45 \
|
||||||
|
volume_db_data.pxar /var/lib/docker/volumes/db_data/_data
|
||||||
|
|
||||||
|
# Restore bind mounts
|
||||||
|
proxmox-backup-client restore \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45 \
|
||||||
|
bind_dot_html.pxar ./html
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Start the Service
|
||||||
|
```bash
|
||||||
|
docker-compose up -d service_name
|
||||||
|
```
|
||||||
|
|
||||||
|
## Advanced Restore Scenarios
|
||||||
|
|
||||||
|
### Restore to Different Location
|
||||||
|
```bash
|
||||||
|
# Restore to temporary location for inspection
|
||||||
|
proxmox-backup-client restore \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45 \
|
||||||
|
volume_db_data.pxar /tmp/inspect_db_data
|
||||||
|
```
|
||||||
|
|
||||||
|
### Restore with Different Ownership
|
||||||
|
```bash
|
||||||
|
# Restore and fix permissions
|
||||||
|
proxmox-backup-client restore \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45 \
|
||||||
|
bind_dot_html.pxar ./html
|
||||||
|
|
||||||
|
# Fix ownership if needed
|
||||||
|
sudo chown -R 1000:1000 ./html
|
||||||
|
```
|
||||||
|
|
||||||
|
### Partial Restore (Specific Files)
|
||||||
|
```bash
|
||||||
|
# Mount archive and copy specific files
|
||||||
|
mkdir /tmp/mount_point
|
||||||
|
proxmox-backup-client mount \
|
||||||
|
--repository user@pbs.example.com:backup-datastore \
|
||||||
|
host/service_name/2024-01-15_10-30-45 \
|
||||||
|
/tmp/mount_point
|
||||||
|
|
||||||
|
# Copy specific files
|
||||||
|
cp /tmp/mount_point/volume_db_data.pxar/postgresql.conf ./
|
||||||
|
cp /tmp/mount_point/bind_dot_html.pxar/index.html ./
|
||||||
|
|
||||||
|
# Unmount
|
||||||
|
fusermount -u /tmp/mount_point
|
||||||
|
```
|
||||||
|
|
||||||
|
## Automation Scripts
|
||||||
|
|
||||||
|
### Backup Script
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
# backup.sh - Automated backup script
|
||||||
|
|
||||||
|
SERVICE_NAME="$1"
|
||||||
|
COMPOSE_FILE="docker-compose.yml"
|
||||||
|
PBS_REPO="user@pbs.example.com:datastore"
|
||||||
|
|
||||||
|
if [ -z "$SERVICE_NAME" ]; then
|
||||||
|
echo "Usage: $0 <service_name>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Starting backup of service: $SERVICE_NAME"
|
||||||
|
./docker2pbs.py "$COMPOSE_FILE" "$SERVICE_NAME" --pbs-repository "$PBS_REPO"
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Backup completed successfully"
|
||||||
|
else
|
||||||
|
echo "Backup failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Restore Script
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
# restore.sh - Automated restore script
|
||||||
|
|
||||||
|
SERVICE_NAME="$1"
|
||||||
|
BACKUP_ID="$2"
|
||||||
|
PBS_REPO="user@pbs.example.com:datastore"
|
||||||
|
|
||||||
|
if [ -z "$SERVICE_NAME" ] || [ -z "$BACKUP_ID" ]; then
|
||||||
|
echo "Usage: $0 <service_name> <backup_id>"
|
||||||
|
echo "Example: $0 database 2024-01-15_10-30-45"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Stopping service: $SERVICE_NAME"
|
||||||
|
docker-compose stop "$SERVICE_NAME"
|
||||||
|
|
||||||
|
echo "Listing archives in backup: $BACKUP_ID"
|
||||||
|
ARCHIVES=$(proxmox-backup-client catalog --repository "$PBS_REPO" "host/$SERVICE_NAME/$BACKUP_ID" | grep "\.pxar$" | awk '{print $1}')
|
||||||
|
|
||||||
|
for ARCHIVE in $ARCHIVES; do
|
||||||
|
echo "Restoring archive: $ARCHIVE"
|
||||||
|
# Determine restore path based on archive type
|
||||||
|
if [[ $ARCHIVE == volume_* ]]; then
|
||||||
|
VOLUME_NAME=${ARCHIVE#volume_}
|
||||||
|
VOLUME_NAME=${VOLUME_NAME%.pxar}
|
||||||
|
RESTORE_PATH="/var/lib/docker/volumes/${VOLUME_NAME}/_data"
|
||||||
|
else
|
||||||
|
# For bind mounts, restore to current directory
|
||||||
|
RESTORE_PATH="./"
|
||||||
|
fi
|
||||||
|
|
||||||
|
proxmox-backup-client restore \
|
||||||
|
--repository "$PBS_REPO" \
|
||||||
|
"host/$SERVICE_NAME/$BACKUP_ID" \
|
||||||
|
"$ARCHIVE" "$RESTORE_PATH"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Starting service: $SERVICE_NAME"
|
||||||
|
docker-compose up -d "$SERVICE_NAME"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Common Issues
|
||||||
|
|
||||||
|
1. **Permission Denied**
|
||||||
|
```bash
|
||||||
|
# Check PBS client permissions
|
||||||
|
ls -la ~/.config/proxmox-backup/
|
||||||
|
|
||||||
|
# Run with sudo if needed
|
||||||
|
sudo proxmox-backup-client restore ...
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Archive Not Found**
|
||||||
|
```bash
|
||||||
|
# List all archives in backup
|
||||||
|
proxmox-backup-client catalog \
|
||||||
|
--repository user@pbs.example.com:datastore \
|
||||||
|
host/service_name/backup_id
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Network/Connection Issues**
|
||||||
|
```bash
|
||||||
|
# Test PBS connectivity
|
||||||
|
proxmox-backup-client list --repository user@pbs.example.com:datastore
|
||||||
|
|
||||||
|
# Check PBS server status
|
||||||
|
ping pbs.example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Disk Space Issues**
|
||||||
|
```bash
|
||||||
|
# Check available space
|
||||||
|
df -h /var/lib/docker/volumes/
|
||||||
|
df -h ./
|
||||||
|
|
||||||
|
# Clean up if needed
|
||||||
|
docker volume prune
|
||||||
|
docker system prune
|
||||||
|
```
|
||||||
|
|
||||||
|
### Best Practices
|
||||||
|
|
||||||
|
- Always stop services before restoring data
|
||||||
|
- Test restore procedures in non-production environments
|
||||||
|
- Keep restore documentation up to date
|
||||||
|
- Monitor disk space during restore operations
|
||||||
|
- Verify data integrity after restoration
|
||||||
|
- Create restore scripts for frequently restored services
|
||||||
Reference in New Issue
Block a user