Update Docker 24.0.5

This commit is contained in:
2025-10-28 22:46:47 +08:00
committed by GitHub
parent 15ef4ffb62
commit 36a168fb75

View File

@@ -2,7 +2,7 @@
set -e set -e
echo "==========================================" echo "=========================================="
echo " Debian专用 Docker 一键安装脚本" echo " 修复Docker服务问题"
echo "==========================================" echo "=========================================="
# 颜色定义 # 颜色定义
@@ -11,192 +11,187 @@ GREEN='\033[0;32m'
YELLOW='\033[1;33m' YELLOW='\033[1;33m'
NC='\033[0m' NC='\033[0m'
# 日志函数
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# 检查磁盘空间 # 检查Docker状态
check_disk_space() { check_docker_status() {
log_info "检查磁盘空间..." log_info "检查Docker服务状态..."
local available=$(df / | awk 'NR==2 {print $4}') systemctl status docker --no-pager -l
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服务
install_minimal_deps() { fix_docker_service() {
log_info "安装最小化依赖..." log_info "修复Docker服务..."
apt-get update --allow-unauthenticated || {
log_warn "APT更新失败继续安装..."
}
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 docker 2>/dev/null || true
systemctl stop containerd 2>/dev/null || true systemctl stop containerd 2>/dev/null || true
# 移除旧配置 # 清理可能的问题
rm -f /etc/apt/sources.list.d/docker.list pkill -f docker 2>/dev/null || true
rm -f /etc/apt/sources.list.d/docker.list.save pkill -f containerd 2>/dev/null || true
rm -rf /var/lib/docker
}
# 下载并安装Docker二进制文件完全离线方式 # 重新配置containerd
install_docker_binary() { log_info "重新配置containerd..."
log_info "下载Docker二进制文件..." containerd config default > /etc/containerd/config.toml 2>/dev/null || true
systemctl enable containerd
systemctl start containerd
# 创建安装目录 # 重启Docker服务
INSTALL_DIR="/opt/docker-bin" log_info "重启Docker服务..."
mkdir -p $INSTALL_DIR
cd $INSTALL_DIR
# 下载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
# 启动服务
systemctl enable docker systemctl enable docker
systemctl daemon-reload
systemctl start docker systemctl start docker
# 等待服务启动 # 等待服务启动
sleep 3 sleep 3
} }
# 验证安装 # 检查服务日志
verify_installation() { check_docker_logs() {
log_info "验证安装..." log_info "检查Docker服务日志..."
journalctl -u docker --no-pager -n 20
}
if command -v docker &> /dev/null; then # 修复权限和配置
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 --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 else
log_error "❌ Docker安装失败" 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 return 1
fi fi
# 测试docker服务 # 创建RustDesk数据目录
if systemctl is-active docker &> /dev/null; then mkdir -p /var/lib/rustdesk-server/{hbbs,hbbr}
log_info "✅ Docker服务运行正常"
else # 拉取RustDesk服务器镜像
log_warn "⚠️ Docker服务未运行尝试启动..." log_info "拉取RustDesk服务器镜像..."
systemctl start docker docker pull rustdesk/rustdesk-server:latest
fi
# 运行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() { main() {
log_info "开始Docker安装流程..." log_info "开始修复Docker服务..."
check_disk_space check_docker_status
clean_docker_config fix_permissions
install_minimal_deps fix_docker_service
install_docker_official check_docker_logs
setup_docker_service verify_fix
verify_installation
log_info "🎉 Docker安装完成" if systemctl is-active docker &> /dev/null; then
log_info "✅ Docker服务修复成功"
echo "" echo ""
echo "使用说明:" read -p "是否现在安装RustDesk服务器(y/n): " -n 1 -r
echo " docker --version # 查看版本" echo
echo " systemctl status docker # 查看服务状态" if [[ $REPLY =~ ^[Yy]$ ]]; then
echo " usermod -aG docker \$USER # 添加用户到docker组" install_rustdesk
else
log_info "您可以稍后手动安装RustDesk"
fi
else
log_error "❌ Docker服务修复失败请检查日志"
fi
} }
# 执行主函数 # 执行主函数