Update Docker 24.0.5

This commit is contained in:
2025-10-28 22:29:18 +08:00
committed by GitHub
parent 97b9adee75
commit 15ef4ffb62

View File

@@ -2,7 +2,7 @@
set -e
echo "=========================================="
echo " Docker 24.0.5 一键离线安装脚本"
echo " Debian专用 Docker 一键安装脚本"
echo "=========================================="
# 颜色定义
@@ -12,197 +12,192 @@ YELLOW='\033[1;33m'
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_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查root权限
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "请使用root权限运行此脚本"
exit 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
}
# 安装依赖
install_dependencies() {
log_info "安装系统依赖..."
apt-get update
apt-get install -y \
# 安装基础依赖(最小化)
install_minimal_deps() {
log_info "安装最小化依赖..."
apt-get update --allow-unauthenticated || {
log_warn "APT更新失败继续安装..."
}
apt-get install -y --allow-unauthenticated \
curl \
wget \
gnupg \
lsb-release \
apt-transport-https \
ca-certificates \
software-properties-common \
iptables \
net-tools
libseccomp2
}
# 清理有问题的docker
clean_docker_sources() {
log_info "清理有问题的Docker..."
if [ -f "/etc/apt/sources.list.d/docker.list" ]; then
mv /etc/apt/sources.list.d/docker.list /etc/apt/sources.list.d/docker.list.backup.$(date +%Y%m%d%H%M%S)
log_info "已备份并清理原有docker源配置"
# 彻底清理有问题的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二进制文件..."
# 创建安装目录
INSTALL_DIR="/opt/docker-bin"
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
}
# 下载Docker 24.0.5离线包
download_docker_packages() {
log_info "创建临时下载目录..."
DOWNLOAD_DIR="/tmp/docker-offline-24.0.5"
mkdir -p $DOWNLOAD_DIR
cd $DOWNLOAD_DIR
# 使用官方脚本安装(网络方式)
install_docker_official() {
log_info "使用Docker官方脚本安装..."
log_info "开始下载Docker 24.0.5离线安装包..."
# 下载并运行官方安装脚本
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
# Docker 24.0.5 组件包
packages=(
"containerd.io_1.6.21-1_amd64.deb"
"docker-ce_24.0.5-1~ubuntu.20.04~focal_amd64.deb"
"docker-ce-cli_24.0.5-1~ubuntu.20.04~focal_amd64.deb"
"docker-buildx-plugin_0.11.2-1~ubuntu.20.04~focal_amd64.deb"
"docker-compose-plugin_2.20.2-1~ubuntu.20.04~focal_amd64.deb"
)
# 运行修改后的脚本
sh get-docker.sh --version 24.0.5
# 下载URL基础路径这里使用官方源您可以根据需要替换为内网源
BASE_URL="https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64"
for package in "${packages[@]}"; do
if [ ! -f "$package" ]; then
log_info "下载: $package"
wget -q "$BASE_URL/$package"
if [ $? -ne 0 ]; then
log_error "下载失败: $package"
log_info "尝试备用下载源..."
# 备用下载源
wget -q "https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/focal/pool/stable/amd64/$package" || {
log_error "备用源也下载失败: $package"
return 1
}
fi
else
log_info "文件已存在: $package"
fi
done
log_info "所有Docker组件下载完成"
# 如果官方脚本失败,使用备用方法
if [ $? -ne 0 ]; then
log_warn "官方脚本安装失败,使用备用方法..."
install_docker_backup
fi
}
# 安装Docker组件
install_docker_packages() {
log_info "开始安装Docker组件..."
DOWNLOAD_DIR="/tmp/docker-offline-24.0.5"
cd $DOWNLOAD_DIR
# 备用安装方法
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~ubuntu.20.04~focal_amd64.deb
dpkg -i docker-ce_24.0.5-1~ubuntu.20.04~focal_amd64.deb
dpkg -i docker-buildx-plugin_0.11.2-1~ubuntu.20.04~focal_amd64.deb
dpkg -i docker-compose-plugin_2.20.2-1~ubuntu.20.04~focal_amd64.deb
log_info "Docker组件安装完成"
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服务
configure_docker() {
setup_docker_service() {
log_info "配置Docker服务..."
# 创建docker用户
# 创建docker组
groupadd docker 2>/dev/null || true
# 配置docker daemon
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
cat > /etc/docker/daemon.json << 'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
"max-size": "50m",
"max-file": "3"
},
"storage-driver": "overlay2",
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
"data-root": "/var/lib/docker"
}
EOF
# 启动并启用docker服务
systemctl daemon-reload
# 启动服务
systemctl enable docker
systemctl start docker
log_info "等待Docker服务启动..."
sleep 5
# 等待服务启动
sleep 3
}
# 验证安装
verify_installation() {
log_info "验证Docker安装..."
log_info "验证安装..."
# 检查docker版本
docker --version
docker-compose --version
# 测试运行容器
if systemctl is-active --quiet docker; then
log_info "测试运行hello-world容器..."
docker run --rm hello-world && {
log_info "✅ Docker安装验证成功"
} || {
log_warn "Docker服务运行但hello-world测试失败可能是网络问题"
}
if command -v docker &> /dev/null; then
docker --version
log_info "✅ Docker安装成功"
else
log_error "Docker服务未运行"
log_error "Docker安装失败"
return 1
fi
}
# 显示使用说明
show_usage() {
log_info "安装完成!使用说明:"
echo ""
echo "1. 启动Docker服务: systemctl start docker"
echo "2. 停止Docker服务: systemctl stop docker"
echo "3. 查看Docker状态: systemctl status docker"
echo "4. 添加用户到docker组: usermod -aG docker \$USER"
echo "5. 重新登录后即可不使用sudo运行docker命令"
echo ""
echo "Docker版本: 24.0.5"
echo "Compose版本: 2.20.2"
echo "Buildx版本: 0.11.2"
# 测试docker服务
if systemctl is-active docker &> /dev/null; then
log_info "✅ Docker服务运行正常"
else
log_warn "⚠️ Docker服务未运行尝试启动..."
systemctl start docker
fi
}
# 主函数
main() {
log_info "开始Docker 24.0.5一键安装..."
log_info "开始Docker安装流程..."
check_root
install_dependencies
clean_docker_sources
download_docker_packages
install_docker_packages
configure_docker
check_disk_space
clean_docker_config
install_minimal_deps
install_docker_official
setup_docker_service
verify_installation
show_usage
log_info "Docker 24.0.5 安装完成!"
log_info "🎉 Docker安装完成"
echo ""
echo "使用说明:"
echo " docker --version # 查看版本"
echo " systemctl status docker # 查看服务状态"
echo " usermod -aG docker \$USER # 添加用户到docker组"
}
# 错误处理
trap 'log_error "脚本执行失败,退出码: $?"; exit 1' ERR
# 执行主函数
main "$@"