项目文件夹

文件
wehub-resource-sync 41b710f9c7
CI / Backend tests (push) Failing after 1s
CI / Frontend checks (push) Failing after 0s
I18n Documentation Sync / sync-docs (push) Failing after 0s
chore: import upstream snapshot with attribution
2026-07-13 12:28:40 +08:00

226 行
5.9 KiB
Bash
可执行文件

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
#!/bin/bash
# AutoClip Docker 停止脚本
# 版本: 1.0
# 功能: 停止AutoClip Docker服务
set -euo pipefail
# =============================================================================
# 配置区域
# =============================================================================
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
NC='\033[0m' # No Color
# 图标定义
ICON_SUCCESS="✅"
ICON_ERROR="❌"
ICON_WARNING="⚠️"
ICON_INFO="️"
ICON_STOP="🛑"
# =============================================================================
# 工具函数
# =============================================================================
log_info() {
echo -e "${BLUE}${ICON_INFO} $1${NC}"
}
log_success() {
echo -e "${GREEN}${ICON_SUCCESS} $1${NC}"
}
log_warning() {
echo -e "${YELLOW}${ICON_WARNING} $1${NC}"
}
log_error() {
echo -e "${RED}${ICON_ERROR} $1${NC}"
}
log_header() {
echo -e "\n${PURPLE}${ICON_STOP} $1${NC}"
echo -e "${PURPLE}$(printf '=%.0s' {1..50})${NC}"
}
# =============================================================================
# 停止函数
# =============================================================================
stop_services() {
log_header "停止AutoClip服务"
local mode="${1:-production}"
local compose_file="docker-compose.yml"
if [[ "$mode" == "dev" ]]; then
compose_file="docker-compose.dev.yml"
fi
log_info "停止服务 (模式: $mode)..."
# 停止服务
if docker-compose -f "$compose_file" down; then
log_success "服务已停止"
else
log_error "停止服务失败"
exit 1
fi
}
cleanup_containers() {
log_header "清理容器"
# 停止所有相关容器
local containers=$(docker ps -a --filter "name=autoclip" --format "{{.Names}}" 2>/dev/null || true)
if [[ -n "$containers" ]]; then
log_info "发现以下AutoClip容器:"
echo "$containers"
if [[ "${1:-}" == "--force" ]]; then
log_info "强制停止所有容器..."
echo "$containers" | xargs docker stop 2>/dev/null || true
echo "$containers" | xargs docker rm 2>/dev/null || true
log_success "容器清理完成"
else
log_warning "使用 --force 参数强制清理容器"
fi
else
log_success "没有发现AutoClip容器"
fi
}
cleanup_images() {
log_header "清理镜像"
if [[ "${1:-}" == "--force" ]]; then
log_info "清理未使用的镜像..."
docker image prune -f
log_success "镜像清理完成"
else
log_info "使用 --force 参数清理未使用的镜像"
fi
}
cleanup_volumes() {
log_header "清理数据卷"
if [[ "${1:-}" == "--force" ]]; then
log_warning "这将删除所有数据,包括项目文件和数据库!"
read -p "确定要继续吗?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
log_info "清理数据卷..."
docker volume prune -f
log_success "数据卷清理完成"
else
log_info "取消清理数据卷"
fi
else
log_info "使用 --force 参数清理未使用的数据卷"
fi
}
show_status() {
log_header "当前状态"
echo -e "${BLUE}📊 容器状态:${NC}"
docker-compose ps 2>/dev/null || echo " 没有运行的服务"
echo -e "\n${BLUE}🐳 AutoClip相关容器:${NC}"
docker ps -a --filter "name=autoclip" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null || echo " 没有发现相关容器"
echo -e "\n${BLUE}💾 数据卷:${NC}"
docker volume ls --filter "name=autoclip" --format "table {{.Name}}\t{{.Driver}}\t{{.Size}}" 2>/dev/null || echo " 没有发现相关数据卷"
}
# =============================================================================
# 主函数
# =============================================================================
main() {
local mode="production"
local cleanup=false
local force=false
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
"dev")
mode="development"
shift
;;
"--cleanup")
cleanup=true
shift
;;
"--force")
force=true
shift
;;
"help"|"-h"|"--help")
show_help
exit 0
;;
*)
log_error "未知参数: $1"
show_help
exit 1
;;
esac
done
log_header "AutoClip Docker 停止器 v1.0"
# 停止服务
stop_services "$mode"
# 清理(如果需要)
if [[ "$cleanup" == true ]]; then
cleanup_containers "$force"
cleanup_images "$force"
cleanup_volumes "$force"
fi
# 显示状态
show_status
echo -e "\n${GREEN}🎉 AutoClip Docker 服务已停止${NC}"
}
# 显示帮助信息
show_help() {
echo "AutoClip Docker 停止脚本"
echo ""
echo "用法:"
echo " $0 [选项]"
echo ""
echo "选项:"
echo " dev 停止开发环境"
echo " --cleanup 停止后清理资源"
echo " --force 强制清理(包括数据)"
echo " help 显示帮助信息"
echo ""
echo "示例:"
echo " $0 # 停止生产环境"
echo " $0 dev # 停止开发环境"
echo " $0 --cleanup # 停止并清理资源"
echo " $0 --cleanup --force # 停止并强制清理所有资源"
echo " $0 help # 显示帮助"
echo ""
echo "注意:"
echo " --force 参数会删除所有数据,请谨慎使用!"
}
# 运行主函数
main "$@"