#!/bin/bash set -e echo "==========================================" echo " 修复Docker服务问题" echo "==========================================" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } # 检查Docker状态 check_docker_status() { log_info "检查Docker服务状态..." systemctl status docker --no-pager -l } # 修复Docker服务 fix_docker_service() { log_info "修复Docker服务..." # 停止服务 systemctl stop docker 2>/dev/null || true systemctl stop containerd 2>/dev/null || true # 清理可能的问题 pkill -f docker 2>/dev/null || true pkill -f containerd 2>/dev/null || true # 重新配置containerd log_info "重新配置containerd..." containerd config default > /etc/containerd/config.toml 2>/dev/null || true systemctl enable containerd systemctl start containerd # 重启Docker服务 log_info "重启Docker服务..." systemctl enable docker systemctl daemon-reload systemctl start docker # 等待服务启动 sleep 3 } # 检查服务日志 check_docker_logs() { log_info "检查Docker服务日志..." journalctl -u docker --no-pager -n 20 } # 修复权限和配置 fix_permissions() { log_info "修复Docker相关权限..." # 创建必要的目录 mkdir -p /etc/docker mkdir -p /var/lib/docker mkdir -p /run/docker # 配置docker daemon(简化配置) cat > /etc/docker/daemon.json << 'EOF' { "log-driver": "json-file", "log-opts": { "max-size": "50m", "max-file": "3" }, "storage-driver": "overlay2" } EOF # 修复权限 chmod 755 /etc/docker chmod 644 /etc/docker/daemon.json } # 验证修复 verify_fix() { log_info "验证Docker修复..." if systemctl is-active docker &> /dev/null; then log_info "✅ Docker服务现在运行正常!" # 测试基本命令 log_info "测试Docker命令..." docker --version docker info --format "{{.ServerVersion}}" && { log_info "✅ Docker服务响应正常!" } || { log_warn "⚠️ Docker服务运行但info命令失败" } # 尝试运行测试容器(不拉取镜像,只测试本地) log_info "测试Docker基本功能..." if docker images -q &> /dev/null; then log_info "✅ Docker镜像列表查询成功!" else log_warn "⚠️ Docker镜像列表查询失败" fi else log_error "❌ Docker服务仍然未运行" return 1 fi } # 安装RustDesk服务器 install_rustdesk() { log_info "开始安装RustDesk服务器..." if ! systemctl is-active docker &> /dev/null; then log_error "Docker服务未运行,无法安装RustDesk" return 1 fi # 创建RustDesk数据目录 mkdir -p /var/lib/rustdesk-server/{hbbs,hbbr} # 拉取RustDesk服务器镜像 log_info "拉取RustDesk服务器镜像..." docker pull rustdesk/rustdesk-server:latest # 运行hbbs (ID服务器) log_info "启动RustDesk hbbs服务..." docker run -d \ --name hbbs \ --network host \ -v /var/lib/rustdesk-server/hbbs:/root \ rustdesk/rustdesk-server:latest hbbs # 运行hbbr (中继服务器) log_info "启动RustDesk hbbr服务..." docker run -d \ --name hbbr \ --network host \ -v /var/lib/rustdesk-server/hbbr:/root \ rustdesk/rustdesk-server:latest hbbr log_info "✅ RustDesk服务器部署完成!" # 显示部署信息 show_rustdesk_info } # 显示RustDesk信息 show_rustdesk_info() { echo "" log_info "🎉 RustDesk服务器部署完成!" echo "==========================================" echo "服务状态:" echo " docker ps -a # 查看容器状态" echo " docker logs hbbs # 查看hbbs日志" echo " docker logs hbbr # 查看hbbr日志" echo "" echo "重要信息:" echo " hbbs容器会生成密钥文件在: /var/lib/rustdesk-server/hbbs" echo " 查看密钥: cat /var/lib/rustdesk-server/hbbs/id_ed25519.pub" echo "" echo "客户端连接时需要:" echo " 1. 服务器IP地址" echo " 2. 上面显示的密钥" echo "==========================================" } # 主函数 main() { log_info "开始修复Docker服务..." check_docker_status fix_permissions fix_docker_service check_docker_logs verify_fix if systemctl is-active docker &> /dev/null; then log_info "✅ Docker服务修复成功!" echo "" read -p "是否现在安装RustDesk服务器?(y/n): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then install_rustdesk else log_info "您可以稍后手动安装RustDesk" fi else log_error "❌ Docker服务修复失败,请检查日志" fi } # 执行主函数 main "$@"