====== backup script ====== #!/bin/bash backup_dir="backup" mkdir -p "$backup_dir" containers=$(docker ps --format "{{.Names}}") for container in $containers; do echo "Creating backup for container: $container" docker export "$container" > "$backup_dir/$container.tar" volumes=$(docker inspect --format='{{range .Mounts}}{{printf "%s\n" .Source}}{{end}}' "$container") for volume in $volumes; do volume_name=$(basename "$volume") echo "Backing up volume: $volume_name" if [[ -d "$volume" ]]; then docker run --rm -v "$volume":/data -v "$backup_dir":/backup busybox tar -czf "/backup/${container}_${volume_name}.tar.gz" -C /data . echo "Backup created for volume: $volume_name" else echo "Skipping volume backup: $volume_name (not a directory)" fi done echo "Backup created for container: $container" done echo "Backup process completed!" ====== restore script ====== #!/bin/bash backup_dir="backup" # Specify the backup file names for each container declare -A container_backups=( ["portainer"]="portainer.tar" ["gitea"]="gitea.tar" ["my-nginx"]="my-nginx.tar" ["awx_task"]="awx_task.tar" # Add more containers and their corresponding backup file names as needed ) # Specify the volume backup file names for each container declare -A volume_backups=( ["portainer"]="data.tar.gz" ["gitea"]="gitea.tar.gz" ["awx_task"]="redis_socket.tar.gz environment.sh.tar.gz projects.tar.gz _data.tar.gz" ["awx_web"]="credentials.py.tar.gz _data.tar.gz" ["awx_memcached"]="memcached_socket.tar.gz" ["awx_redis"]="_data.tar.gz" ["awx_postgres"]="_data.tar.gz data.tar.gz" # Add more containers and their corresponding volume backup file names as needed ) # Stop and remove existing containers (if any) docker stop $(docker ps -aq) >/dev/null 2>&1 docker rm $(docker ps -aq) >/dev/null 2>&1 # Restore containers for container in "${!container_backups[@]}"; do backup_file="${container_backups[$container]}" backup_path="${backup_dir}/${backup_file}" if [ -f "$backup_path" ]; then echo "Restoring container: $container" docker import "$backup_path" "$container" echo "Container $container restored successfully" else echo "Backup file not found for container: $container" fi done # Restore volumes for container in "${!volume_backups[@]}"; do backups="${volume_backups[$container]}" for backup in $backups; do backup_path="${backup_dir}/${container}_${backup}" volume_name="${backup%.tar.gz}" if [ -f "$backup_path" ]; then echo "Restoring volume: $volume_name for container: $container" docker run --rm -v "$volume_name":/data -v "$backup_path":/backup busybox tar -xzf "/backup/${container}_${backup}" -C /data echo "Volume $volume_name for container $container restored successfully" else echo "Backup file not found for volume: $volume_name of container: $container" fi done done echo "Container restoration process completed!"