#!/bin/bash set -e cd .. VOLUMES=( pg-data redis-data ) # 需要强制重建的卷 FORCE_RECREATE_VOLUMES=( redis-data ) # ANSI 颜色 GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' RED='\033[0;31m' RESET='\033[0m' print_info() { echo -e "${BLUE}📘 $1${RESET}" } print_success() { echo -e "${GREEN}✅ $1${RESET}" } print_error() { echo -e "${RED}❌ $1${RESET}" } print_step() { echo -e "\n${YELLOW}🚀 $1${RESET}" } print_divider() { echo -e "${YELLOW}----------------------------------------${RESET}" } # 判断是否需要强制重建卷 needs_recreate() { local vol="$1" for fvol in "${FORCE_RECREATE_VOLUMES[@]}"; do if [[ "$vol" == "$fvol" ]]; then return 0 fi done return 1 } print_divider print_step "进入 docker 目录 📁" cd docker || { print_error "❌ 未找到 docker 目录"; exit 1; } print_step "关闭现有 Docker Compose 服务 🧹" docker compose down || { print_error "❌ docker compose down 执行失败"; exit 1; } # 检查并创建 Docker Volumes print_step "🔍 检查并创建 Docker Volumes" for volume in "${VOLUMES[@]}"; do if needs_recreate "$volume"; then print_info "🔄 强制重建卷: $volume" docker volume rm "$volume" 2>/dev/null || print_info "卷 $volume 不存在,无需删除" docker volume create "$volume" || { print_error "无法创建卷: $volume"; exit 1; } print_success "卷 $volume 已重新创建" else if docker volume inspect "$volume" > /dev/null 2>&1; then print_info "卷 $volume 已存在" else print_info "🧱 创建卷: $volume" docker volume create "$volume" || { print_error "无法创建卷: $volume"; exit 1; } print_success "卷 $volume 创建成功" fi fi done print_step "重新启动 Docker Compose 服务 🚀" docker compose up -d || { print_error "❌ docker compose up 执行失败"; exit 1; } print_success "🎉 服务已重新启动成功!使用 docker ps 查看运行状态" print_divider