增加centos兼容

This commit is contained in:
wangbo 2025-06-12 14:40:40 +08:00
parent 26ce3022d6
commit a6717660fa

116
start.sh
View File

@ -15,25 +15,6 @@ elif [[ "$OS_FAMILY" == "Ubuntu" ]]; then
OS_VERSION=$(lsb_release -cs) OS_VERSION=$(lsb_release -cs)
fi fi
# 函数:检查并等待网络连接
check_network() {
echo "🌐 检查网络连接..."
for i in {1..10}; do
if curl -sSf https://download.docker.com/ &> /dev/null; then
echo "✅ 网络连接正常。"
return 0
else
echo "⚠️ 网络连接异常或无法访问 Docker 仓库,等待 10 秒后重试... ($i/10)"
sleep 10
fi
done
echo "❌ 无法建立网络连接到 Docker 仓库,请检查您的网络配置。"
exit 1
}
# 预检网络连接
#check_network
# Docker 安装 # Docker 安装
if command -v docker &> /dev/null; then if command -v docker &> /dev/null; then
echo "✅ Docker 已安装,跳过安装步骤" echo "✅ Docker 已安装,跳过安装步骤"
@ -44,44 +25,67 @@ else
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)..."
# 使用国内镜像作为备用,或直接从 Docker 官方获取 # 尝试使用国内镜像源的 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg || \ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg || \
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg curl -fsSL https://mirrors.nwafu.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg || {
echo "❌ 无法获取 Docker GPG 密钥。请检查网络或尝试手动下载。"
exit 1
}
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://download.docker.com/linux/ubuntu \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null $(lsb_release -cs) 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)..."
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 安装推荐的 Docker CE 相关组件,包括 docker-buildx-plugin 和 docker-compose-plugin
# 确保安装 docker-compose-plugin 而不是旧版 docker-compose sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || {
echo "❌ Docker 或其组件安装失败。请检查错误日志。"
exit 1
}
elif [[ "$OS_FAMILY" == "CentOS" ]]; then elif [[ "$OS_FAMILY" == "CentOS" ]]; then
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 文件
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo || { if [ -f "/etc/yum.repos.d/docker-ce.repo" ]; then
echo "❌ 无法添加 Docker 官方源。请检查您的网络连接或尝试手动配置国内镜像源。" echo "🔄 备份原有 Docker CE repo 文件..."
exit 1 sudo mv /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/docker-ce.repo.bak
} fi
# CentOS 8+ 可能会遇到 module 冲突,禁用默认的 container-tools 模块 # 尝试配置阿里云镜像源
echo "尝试配置阿里云 Docker CE 镜像源..."
sudo tee /etc/yum.repos.d/docker-ce.repo <<-'EOF'
[docker-ce-stable]
name=Docker CE Stable - $basearch
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+)
if [[ "$OS_VERSION" -ge "8" ]]; then if [[ "$OS_VERSION" -ge "8" ]]; then
echo "⚙️ 禁用 CentOS 8+ 默认的 container-tools 模块以避免冲突..." echo "⚙️ 禁用 CentOS 8+ 默认的 container-tools 模块以避免冲突..."
sudo yum module disable -y container-tools sudo yum module disable -y container-tools || true # 允许失败,某些系统可能没有此模块
sudo yum module enable -y container-tools:docker sudo yum module enable -y container-tools:docker || true # 允许失败
fi fi
echo "🐳 安装 Docker (CentOS)..." echo "🐳 安装 Docker (CentOS)..."
# 尝试安装 Docker CE 及其组件,包括 buildx 插件 # 尝试安装 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 "提示:如果遇到 'No more mirrors to try' 错误,可能是网络问题或防火墙阻止了访问。" echo "例如,您可以编辑 /etc/yum.repos.d/docker-ce.repo 将 baseurl 更改为其他镜像站,如清华大学:"
echo " https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/\$releasever/\$basearch/stable"
exit 1 exit 1
} }
@ -93,6 +97,7 @@ else
echo "✅ 启动并设置 Docker 开机自启..." echo "✅ 启动并设置 Docker 开机自启..."
sudo systemctl enable docker sudo systemctl enable docker
sudo systemctl start docker sudo systemctl start docker
# 将当前用户添加到 docker 组,以便无需 sudo 运行 Docker 命令 # 将当前用户添加到 docker 组,以便无需 sudo 运行 Docker 命令
if ! getent group docker | grep -qw "$USER"; then if ! getent group docker | grep -qw "$USER"; then
echo "👥 将当前用户 ($USER) 添加到 docker 组..." echo "👥 将当前用户 ($USER) 添加到 docker 组..."
@ -101,29 +106,26 @@ else
fi fi
fi fi
# Docker Compose 安装(使用 docker-compose-plugin 替代独立安装) # Docker Compose 安装 (主要依赖 docker-compose-plugin)
# 新版 Docker 建议使用 docker-compose-plugin它是 Docker CLI 的一部分 if command -v docker-compose-plugin &> /dev/null; then
if command -v docker-compose &> /dev/null && ! command -v docker-compose-plugin &> /dev/null; then
echo "⚠️ 检测到旧版 Docker Compose 独立安装,建议升级到 docker-compose-plugin。"
echo "⚙️ 尝试安装 docker-compose-plugin..."
if [[ "$OS_FAMILY" == "Ubuntu" ]]; then
sudo apt-get install -y docker-compose-plugin
elif [[ "$OS_FAMILY" == "CentOS" ]]; then
sudo yum install -y docker-compose-plugin
fi
# 移除旧版,如果旧版存在且已成功安装新版
if command -v docker-compose-plugin &> /dev/null && [[ -f "/usr/local/bin/docker-compose" ]]; then
echo "🗑️ 移除旧版 Docker Compose 独立安装..."
sudo rm -f /usr/local/bin/docker-compose
fi
elif command -v docker-compose-plugin &> /dev/null; then
echo "✅ Docker Compose (插件版) 已安装,跳过安装步骤" echo "✅ Docker Compose (插件版) 已安装,跳过安装步骤"
elif command -v docker-compose &> /dev/null; then
echo "⚠️ 检测到旧版 Docker Compose 独立安装。为保持最新兼容性,推荐使用 Docker Compose 插件版。"
echo "如果您希望继续使用旧版,可以忽略此提示。"
echo "如果需要安装插件版,请先卸载旧版或手动安装 docker-compose-plugin。"
else else
echo "⚙️ 安装 Docker Compose (插件版)..." echo "⚙️ 安装 Docker Compose (插件版)..."
# 尝试安装 docker-compose-plugin它通常随 docker-ce 一起安装
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 源或网络。"
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 源或网络。"
exit 1
}
else else
echo "❌ 未知操作系统,无法安装 Docker Compose 插件版。" echo "❌ 未知操作系统,无法安装 Docker Compose 插件版。"
exit 1 exit 1
@ -134,13 +136,13 @@ 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 已就绪!"