diff --git a/deploy.sh b/deploy.sh index 6c48376..e2a7364 100644 --- a/deploy.sh +++ b/deploy.sh @@ -25,23 +25,47 @@ fi # 更新Docker Buildx到最新版本 echo "更新Docker Buildx..." # 检查当前Buildx版本 - buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1) + buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1 || echo "0.0") + echo "当前Buildx版本: $buildx_version" + if [[ "$buildx_version" < "0.17" ]]; then - echo "当前Buildx版本 $buildx_version 低于要求的0.17,正在升级..." - # 卸载旧版本 + echo "当前Buildx版本 $buildx_version 低于要求的0.17,正在强制升级..." + + # 1. 停止Docker服务 + systemctl stop docker 2>/dev/null || true + sleep 3 + + # 2. 卸载旧版本Buildx + rm -rf ~/.docker/cli-plugins/docker-buildx 2>/dev/null || true + rm -rf /usr/libexec/docker/cli-plugins/docker-buildx 2>/dev/null || true docker buildx uninstall 2>/dev/null || true - # 安装最新版本 + sleep 2 + + # 3. 重新安装Docker服务 + systemctl start docker 2>/dev/null || true + sleep 5 + + # 4. 安装最新版本Buildx docker buildx install - # 重启Docker服务以应用更改 + + # 5. 再次重启Docker服务 systemctl restart docker 2>/dev/null || true - # 等待Docker重启 sleep 5 - # 创建并使用默认构建器 - docker buildx create --name mybuilder --use 2>/dev/null || true + + # 6. 创建并使用默认构建器 + docker buildx create --name mybuilder --driver docker-container --use 2>/dev/null || true + fi + + # 再次验证Buildx版本 + new_buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1 || echo "0.0") + echo "升级后Buildx版本: $new_buildx_version" + + # 如果Buildx版本仍然不足,尝试使用docker build替代docker-compose build + if [[ "$new_buildx_version" < "0.17" ]]; then + echo "警告: Buildx版本仍然低于0.17,将尝试使用替代方案构建镜像..." + # 创建一个环境变量标记,后续使用 + export USE_ALTERNATE_BUILD="true" fi - # 验证Buildx版本 - new_buildx_version=$(docker buildx version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1) - echo "当前Buildx版本: $new_buildx_version" echo "Docker工具检查完成" @@ -106,12 +130,25 @@ fi fi # 构建Docker镜像 -echo "构建Docker镜像..." -docker-compose build + echo "构建Docker镜像..." + if [[ "$USE_ALTERNATE_BUILD" == "true" ]]; then + # 使用docker build替代docker-compose build + echo "使用docker build直接构建镜像..." + docker build -t project_app-app . --no-cache + if [ $? -eq 0 ]; then + echo "镜像构建成功!" + else + echo "错误: 镜像构建失败!" + exit 1 + fi + else + # 使用正常的docker-compose build + docker-compose build + fi # 启动服务 -echo "启动服务..." -docker-compose up -d + echo "启动服务..." + docker-compose up -d echo "部署完成!服务已启动并在后台运行。" echo "使用以下命令查看服务状态:docker-compose ps"