增加centos兼容
This commit is contained in:
parent
a6717660fa
commit
44e90b53f8
130
start.sh
130
start.sh
@ -8,13 +8,37 @@ echo "==========================="
|
|||||||
|
|
||||||
# 获取操作系统类型和版本
|
# 获取操作系统类型和版本
|
||||||
OS_FAMILY=$(hostnamectl | grep "Operating System" | awk '{print $3}')
|
OS_FAMILY=$(hostnamectl | grep "Operating System" | awk '{print $3}')
|
||||||
OS_VERSION=""
|
OS_VERSION_ID=$(grep -oP '(?<=^VERSION_ID=")[0-9.]+' /etc/os-release | cut -d'.' -f1)
|
||||||
if [[ "$OS_FAMILY" == "CentOS" ]]; then
|
OS_CODENAME=""
|
||||||
OS_VERSION=$(grep -oP '(?<=^VERSION_ID=")[0-9.]+' /etc/os-release | cut -d'.' -f1)
|
if [[ "$OS_FAMILY" == "Ubuntu" ]]; then
|
||||||
elif [[ "$OS_FAMILY" == "Ubuntu" ]]; then
|
OS_CODENAME=$(lsb_release -cs)
|
||||||
OS_VERSION=$(lsb_release -cs)
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 定义国内镜像源
|
||||||
|
# Ubuntu 镜像源
|
||||||
|
UBUNTU_DOCKER_MIRROR_URL="https://mirrors.ustc.edu.cn/docker-ce" # 中科大
|
||||||
|
UBUNTU_DOCKER_GPG_URL="https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg"
|
||||||
|
|
||||||
|
# CentOS 镜像源 (选择一个即可,这里提供清华和阿里云)
|
||||||
|
CENTOS_DOCKER_MIRROR_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce" # 清华大学
|
||||||
|
# CENTOS_DOCKER_MIRROR_URL="https://mirrors.aliyun.com/docker-ce" # 阿里云 - 如果清华源不稳定可以尝试这个
|
||||||
|
|
||||||
|
# 函数:检查并等待网络连接
|
||||||
|
check_network() {
|
||||||
|
echo "🌐 检查网络连接到 Docker 官方仓库 (备用)..."
|
||||||
|
if curl -sSf https://download.docker.com/ &> /dev/null; then
|
||||||
|
echo "✅ 网络连接到 Docker 官方仓库正常。"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo "⚠️ 无法连接到 Docker 官方仓库。将尝试使用国内镜像源。"
|
||||||
|
# 即使无法连接官方源,也继续尝试国内源
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 预检网络连接(非阻塞,仅作为提示)
|
||||||
|
check_network
|
||||||
|
|
||||||
# Docker 安装
|
# Docker 安装
|
||||||
if command -v docker &> /dev/null; then
|
if command -v docker &> /dev/null; then
|
||||||
echo "✅ Docker 已安装,跳过安装步骤"
|
echo "✅ Docker 已安装,跳过安装步骤"
|
||||||
@ -24,30 +48,27 @@ else
|
|||||||
sudo apt update -y
|
sudo apt update -y
|
||||||
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
|
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
|
||||||
|
|
||||||
echo "🔑 添加 Docker GPG 密钥 (Ubuntu)..."
|
echo "🔑 添加 Docker GPG 密钥 (Ubuntu) - 优先使用国内镜像源..."
|
||||||
# 尝试使用国内镜像源的 GPG 密钥
|
# 现代 Ubuntu 推荐使用 gpg --dearmor
|
||||||
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg || \
|
sudo install -m 0755 -d /etc/apt/keyrings
|
||||||
curl -fsSL https://mirrors.nwafu.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg || {
|
if ! curl -fsSL "$UBUNTU_DOCKER_GPG_URL" | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg; then
|
||||||
echo "❌ 无法获取 Docker GPG 密钥。请检查网络或尝试手动下载。"
|
echo "❌ 无法从国内镜像源获取 GPG 密钥,尝试从官方源获取..."
|
||||||
exit 1
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg || {
|
||||||
}
|
echo "❌ 无法获取 Docker GPG 密钥,请检查网络或 GPG 密钥 URL。"
|
||||||
sudo chmod a+r /etc/apt/keyrings/docker.gpg # 设置正确的权限
|
exit 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
sudo chmod a+r /etc/apt/keyrings/docker.gpg # 确保可读权限
|
||||||
|
|
||||||
echo "🌍 添加 Docker 源 (Ubuntu)..."
|
echo "🌍 添加 Docker 源 (Ubuntu) - 使用国内镜像源..."
|
||||||
# 配置国内镜像源
|
|
||||||
echo \
|
echo \
|
||||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
|
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] $UBUNTU_DOCKER_MIRROR_URL/linux/ubuntu \
|
||||||
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null || {
|
$OS_CODENAME stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
echo "❌ 无法添加 Docker 国内镜像源。请检查网络或源地址。"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
sudo apt-get update -y
|
sudo apt-get update -y
|
||||||
|
|
||||||
echo "🐳 安装 Docker (Ubuntu)..."
|
echo "🐳 安装 Docker (Ubuntu)..."
|
||||||
# 安装推荐的 Docker CE 相关组件,包括 docker-buildx-plugin 和 docker-compose-plugin
|
|
||||||
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || {
|
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || {
|
||||||
echo "❌ Docker 或其组件安装失败。请检查错误日志。"
|
echo "❌ Docker 或其组件安装失败。请检查错误日志或尝试手动安装。"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,37 +76,29 @@ else
|
|||||||
echo "📦 安装依赖 (CentOS)..."
|
echo "📦 安装依赖 (CentOS)..."
|
||||||
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
|
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
|
||||||
|
|
||||||
echo "🌍 添加 Docker 源 (CentOS)..."
|
echo "🌍 添加 Docker 源 (CentOS) - 使用国内镜像源..."
|
||||||
# 备份原有 repo 文件
|
# 添加 Docker CE 官方 repo
|
||||||
if [ -f "/etc/yum.repos.d/docker-ce.repo" ]; then
|
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
||||||
echo "🔄 备份原有 Docker CE repo 文件..."
|
|
||||||
sudo mv /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/docker-ce.repo.bak
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 尝试配置阿里云镜像源
|
# 替换为国内镜像源
|
||||||
echo "尝试配置阿里云 Docker CE 镜像源..."
|
echo "🔄 替换 Docker 源为国内镜像 ($CENTOS_DOCKER_MIRROR_URL)..."
|
||||||
sudo tee /etc/yum.repos.d/docker-ce.repo <<-'EOF'
|
sudo sed -i "s+https://download.docker.com+$CENTOS_DOCKER_MIRROR_URL+" /etc/yum.repos.d/docker-ce.repo || {
|
||||||
[docker-ce-stable]
|
echo "❌ 替换 Docker 源失败,可能 repo 文件路径不正确或无权限。"
|
||||||
name=Docker CE Stable - $basearch
|
exit 1
|
||||||
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
|
}
|
||||||
gpgcheck=1
|
|
||||||
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
|
|
||||||
enabled=1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# 禁用默认的 container-tools 模块 (CentOS 8+)
|
# CentOS 8+ 可能会遇到 module 冲突,禁用默认的 container-tools 模块
|
||||||
if [[ "$OS_VERSION" -ge "8" ]]; then
|
if [[ "$OS_VERSION_ID" -ge "8" ]]; then
|
||||||
echo "⚙️ 禁用 CentOS 8+ 默认的 container-tools 模块以避免冲突..."
|
echo "⚙️ 禁用 CentOS 8+ 默认的 container-tools 模块以避免冲突..."
|
||||||
sudo yum module disable -y container-tools || true # 允许失败,某些系统可能没有此模块
|
sudo yum module disable -y container-tools
|
||||||
sudo yum module enable -y container-tools:docker || true # 允许失败
|
sudo yum module enable -y container-tools:docker
|
||||||
fi
|
fi
|
||||||
|
sudo yum makecache
|
||||||
|
|
||||||
echo "🐳 安装 Docker (CentOS)..."
|
echo "🐳 安装 Docker (CentOS)..."
|
||||||
# 尝试安装 Docker CE 及其组件,包括 buildx 插件和 compose 插件
|
|
||||||
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || {
|
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || {
|
||||||
echo "❌ Docker 或其组件安装失败。请检查错误日志或尝试更换国内镜像源。"
|
echo "❌ Docker 或其组件安装失败。请检查错误日志或尝试手动安装。"
|
||||||
echo "例如,您可以编辑 /etc/yum.repos.d/docker-ce.repo 将 baseurl 更改为其他镜像站,如清华大学:"
|
echo "提示:如果仍遇到下载问题,请检查网络、防火墙或尝试切换另一个国内镜像源。"
|
||||||
echo " https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/\$releasever/\$basearch/stable"
|
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,24 +119,24 @@ EOF
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Docker Compose 安装 (主要依赖 docker-compose-plugin)
|
# Docker Compose 检查和安装 (优先使用 docker-compose-plugin)
|
||||||
if command -v docker-compose-plugin &> /dev/null; then
|
if command -v docker &> /dev/null && docker compose version &> /dev/null; then
|
||||||
echo "✅ Docker Compose (插件版) 已安装,跳过安装步骤"
|
echo "✅ Docker Compose (插件版) 已安装,跳过安装步骤"
|
||||||
elif command -v docker-compose &> /dev/null; then
|
elif command -v docker-compose &> /dev/null && ! command -v docker &> /dev/null; then
|
||||||
echo "⚠️ 检测到旧版 Docker Compose 独立安装。为保持最新兼容性,推荐使用 Docker Compose 插件版。"
|
echo "⚠️ 检测到旧版 Docker Compose 独立安装,但未检测到 Docker 插件版。"
|
||||||
echo "如果您希望继续使用旧版,可以忽略此提示。"
|
echo "建议在安装 Docker CE 时一起安装 docker-compose-plugin。"
|
||||||
echo "如果需要安装插件版,请先卸载旧版或手动安装 docker-compose-plugin。"
|
|
||||||
else
|
else
|
||||||
echo "⚙️ 安装 Docker Compose (插件版)..."
|
echo "⚙️ 安装 Docker Compose (插件版)..."
|
||||||
# 尝试安装 docker-compose-plugin,它通常随 docker-ce 一起安装
|
# 如果 Docker CE 安装成功,docker-compose-plugin 应该已经安装了。
|
||||||
|
# 这里是额外的检查,以防万一。
|
||||||
if [[ "$OS_FAMILY" == "Ubuntu" ]]; then
|
if [[ "$OS_FAMILY" == "Ubuntu" ]]; then
|
||||||
sudo apt-get install -y docker-compose-plugin || {
|
sudo apt-get install -y docker-compose-plugin || {
|
||||||
echo "❌ 无法安装 docker-compose-plugin。请检查您的 APT 源或网络。"
|
echo "❌ Docker Compose 插件版安装失败,请手动检查。"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
elif [[ "$OS_FAMILY" == "CentOS" ]]; then
|
elif [[ "$OS_FAMILY" == "CentOS" ]]; then
|
||||||
sudo yum install -y docker-compose-plugin || {
|
sudo yum install -y docker-compose-plugin || {
|
||||||
echo "❌ 无法安装 docker-compose-plugin。请检查您的 YUM 源或网络。"
|
echo "❌ Docker Compose 插件版安装失败,请手动检查。"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -132,17 +145,18 @@ else
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "📌 Docker 运行状态:"
|
echo "📌 Docker 运行状态:"
|
||||||
sudo systemctl status docker --no-pager || true
|
sudo systemctl status docker --no-pager || true
|
||||||
|
|
||||||
echo "📌 Docker Compose 版本:"
|
echo "📌 Docker Compose 版本:"
|
||||||
# 优先使用 'docker compose' 命令 (新版插件),如果不行再尝试 'docker-compose' (旧版独立安装)
|
# 优先使用 docker compose 命令(新版),如果不行再尝试 docker-compose(旧版或别名)
|
||||||
if command -v docker &> /dev/null && docker compose version &> /dev/null; then
|
if command -v docker &> /dev/null && docker compose version &> /dev/null; then
|
||||||
docker compose version
|
docker compose version
|
||||||
elif command -v docker-compose &> /dev/null; then
|
elif command -v docker-compose &> /dev/null; then
|
||||||
docker-compose -v
|
docker-compose -v
|
||||||
else
|
else
|
||||||
echo "❌ 无法检测 Docker Compose 版本。可能未完全安装或需要重新登录。"
|
echo "❌ 无法检测 Docker Compose 版本。"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "🎉 Docker 和 Docker Compose 已就绪!"
|
echo "🎉 Docker 和 Docker Compose 已就绪!"
|
||||||
|
Loading…
Reference in New Issue
Block a user