diff --git a/Docker 24.0.5 b/Docker 24.0.5 index 44fc5f8..fb40218 100644 --- a/Docker 24.0.5 +++ b/Docker 24.0.5 @@ -2,7 +2,7 @@ set -e echo "==========================================" -echo " Debian专用 Docker 一键安装脚本" +echo " 修复Docker服务问题" echo "==========================================" # 颜色定义 @@ -11,192 +11,187 @@ 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"; } -# 检查磁盘空间 -check_disk_space() { - log_info "检查磁盘空间..." - local available=$(df / | awk 'NR==2 {print $4}') - if [ "$available" -lt 1048576 ]; then # 小于1GB - log_warn "磁盘空间紧张,正在清理..." - apt-get clean - rm -rf /var/lib/apt/lists/* - rm -rf /tmp/* - journalctl --vacuum-size=50M - fi +# 检查Docker状态 +check_docker_status() { + log_info "检查Docker服务状态..." + systemctl status docker --no-pager -l } -# 安装基础依赖(最小化) -install_minimal_deps() { - log_info "安装最小化依赖..." - apt-get update --allow-unauthenticated || { - log_warn "APT更新失败,继续安装..." - } +# 修复Docker服务 +fix_docker_service() { + log_info "修复Docker服务..." - apt-get install -y --allow-unauthenticated \ - curl \ - wget \ - gnupg \ - ca-certificates \ - iptables \ - libseccomp2 -} - -# 彻底清理有问题的docker配置 -clean_docker_config() { - log_info "清理Docker配置..." - # 停止docker服务 + # 停止服务 systemctl stop docker 2>/dev/null || true systemctl stop containerd 2>/dev/null || true - # 移除旧配置 - rm -f /etc/apt/sources.list.d/docker.list - rm -f /etc/apt/sources.list.d/docker.list.save - rm -rf /var/lib/docker -} - -# 下载并安装Docker二进制文件(完全离线方式) -install_docker_binary() { - log_info "下载Docker二进制文件..." + # 清理可能的问题 + pkill -f docker 2>/dev/null || true + pkill -f containerd 2>/dev/null || true - # 创建安装目录 - INSTALL_DIR="/opt/docker-bin" - mkdir -p $INSTALL_DIR - cd $INSTALL_DIR + # 重新配置containerd + log_info "重新配置containerd..." + containerd config default > /etc/containerd/config.toml 2>/dev/null || true + systemctl enable containerd + systemctl start containerd - # 下载Docker静态二进制文件(从官方release) - DOCKER_VERSION="24.0.5" - log_info "下载Docker $DOCKER_VERSION 静态二进制文件..." - - # 下载docker cli - if [ ! -f "docker" ]; then - wget -O docker https://download.docker.com/linux/static/stable/x86_64/docker-$DOCKER_VERSION.tgz && \ - tar xzvf docker-$DOCKER_VERSION.tgz && \ - cp docker/docker /usr/local/bin/ && \ - chmod +x /usr/local/bin/docker - fi - - # 下载docker-compose - if [ ! -f "docker-compose" ]; then - DOCKER_COMPOSE_VERSION="2.20.2" - wget -O /usr/local/bin/docker-compose "https://github.com/docker/compose/releases/download/v$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" && \ - chmod +x /usr/local/bin/docker-compose - fi -} - -# 使用官方脚本安装(网络方式) -install_docker_official() { - log_info "使用Docker官方脚本安装..." - - # 下载并运行官方安装脚本 - curl -fsSL https://get.docker.com -o get-docker.sh - # 修改脚本以跳过空间检查 - sed -i 's/check_space/#check_space/g' get-docker.sh - sed -i 's/apt_get_update/#apt_get_update/g' get-docker.sh - - # 运行修改后的脚本 - sh get-docker.sh --version 24.0.5 - - # 如果官方脚本失败,使用备用方法 - if [ $? -ne 0 ]; then - log_warn "官方脚本安装失败,使用备用方法..." - install_docker_backup - fi -} - -# 备用安装方法 -install_docker_backup() { - log_info "使用备用方法安装Docker..." - - # 直接下载deb包安装 - cd /tmp - wget https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/docker-ce_24.0.5-1~debian.12~bookworm_amd64.deb - wget https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/docker-ce-cli_24.0.5-1~debian.12~bookworm_amd64.deb - wget https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/containerd.io_1.6.21-1_amd64.deb - - # 安装依赖 - apt-get install -y --allow-unauthenticated \ - libltdl7 \ - pigz \ - iptables - - # 安装docker包 - dpkg -i containerd.io_1.6.21-1_amd64.deb - dpkg -i docker-ce-cli_24.0.5-1~debian.12~bookworm_amd64.deb - dpkg -i docker-ce_24.0.5-1~debian.12~bookworm_amd64.deb -} - -# 配置Docker服务 -setup_docker_service() { - log_info "配置Docker服务..." - - # 创建docker组 - groupadd docker 2>/dev/null || true - - # 配置docker daemon - mkdir -p /etc/docker - cat > /etc/docker/daemon.json << 'EOF' -{ - "exec-opts": ["native.cgroupdriver=systemd"], - "log-driver": "json-file", - "log-opts": { - "max-size": "50m", - "max-file": "3" - }, - "storage-driver": "overlay2", - "data-root": "/var/lib/docker" -} -EOF - - # 启动服务 + # 重启Docker服务 + log_info "重启Docker服务..." systemctl enable docker + systemctl daemon-reload systemctl start docker # 等待服务启动 sleep 3 } -# 验证安装 -verify_installation() { - log_info "验证安装..." +# 检查服务日志 +check_docker_logs() { + log_info "检查Docker服务日志..." + journalctl -u docker --no-pager -n 20 +} + +# 修复权限和配置 +fix_permissions() { + log_info "修复Docker相关权限..." - if command -v docker &> /dev/null; then + # 创建必要的目录 + 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 - log_info "✅ Docker安装成功!" + 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安装失败" + 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 - # 测试docker服务 - if systemctl is-active docker &> /dev/null; then - log_info "✅ Docker服务运行正常" - else - log_warn "⚠️ Docker服务未运行,尝试启动..." - systemctl start docker - 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安装流程..." + log_info "开始修复Docker服务..." - check_disk_space - clean_docker_config - install_minimal_deps - install_docker_official - setup_docker_service - verify_installation + check_docker_status + fix_permissions + fix_docker_service + check_docker_logs + verify_fix - log_info "🎉 Docker安装完成!" - echo "" - echo "使用说明:" - echo " docker --version # 查看版本" - echo " systemctl status docker # 查看服务状态" - echo " usermod -aG docker \$USER # 添加用户到docker组" + 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 } # 执行主函数