#!/bin/bash # 变量定义 LAST_TAG="1.0.40" TAG="1.0.41" TARGET_PATH="/root/web/canrud-outside-nuxt-front" DOCKERFILE_PATH="/root/web/canrud-outside-nuxt-front/canrud-nuxt-front" IMAGE_NAME="canrud-outside-front" TAR_FILE="${TARGET_PATH}/${IMAGE_NAME}_${TAG}.tar" DOCKER_COMPOSE_FILE="${TARGET_PATH}/docker-compose.yml" # 定义错误处理函数 handle_error() { echo "Error occurred at step: $1. Exiting." exit 1 } # 步骤-1:修改 docker-compose.yml 文件 echo "Updating docker-compose.yml file..." cat > "$DOCKER_COMPOSE_FILE" <<EOL version: '3.8' services: canrud-outside-front: image: ${IMAGE_NAME}:${TAG} # 使用指定的镜像和标签 container_name: canrud-outside-front ports: - "3000:3000" # 映射端口 environment: - BASE_URL=http://47.89.254.121:8002/shop restart: unless-stopped # 如果容器退出,自动重启容器,除非是用户手动停止 EOL # 检查文件是否已更新 if [ $? -ne 0 ]; then handle_error "Update docker-compose.yml" fi # 步骤0:拉取代码 echo "Pulling latest code..." cd "${DOCKERFILE_PATH}" || handle_error "Change directory to ${DOCKERFILE_PATH}" git pull || handle_error "Git pull" # 步骤1: 构建 Docker 镜像 echo "Building Docker image..." docker build -t ${IMAGE_NAME}:${TAG} . || handle_error "Docker build" # 步骤2: 将 Docker 镜像导出为 tar 文件 echo "Saving Docker image to tar file..." docker save -o ${TAR_FILE} ${IMAGE_NAME}:${TAG} || handle_error "Docker save" # 步骤3:加载镜像 echo "Loading Docker image from tar file..." docker load -i "$TAR_FILE" || handle_error "Docker load" # 步骤4:删除当前运行的容器 echo "Stopping and removing the current container..." docker stop canrud-outside-front || handle_error "Docker stop" docker rm canrud-outside-front || handle_error "Docker rm" # 步骤5:运行当前镜像 echo "Starting container with the new image..." cd "${TARGET_PATH}" || handle_error "Change directory to ${TARGET_PATH}" docker-compose up -d || handle_error "Docker-compose up" echo "All tasks completed successfully!"