Files
dock/Docker 24.0.5
2025-10-28 22:46:47 +08:00

199 lines
5.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 "$@"