#!/bin/bash set -euo pipefail # 更严格的错误检查:未定义变量报错、管道错误传递 # 定义日志函数(带时间戳和级别) log_info() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] [INFO] $1" } log_warn() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] [WARN] $1" >&2 } log_error() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] [ERROR] $1" >&2 } # 定义配置常量(等号两侧无空格!集中管理,便于修改) IMAGE_NAME="asset-assistant-frontend-system" IMAGE_TAG="1.0.0" FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" DOCKERFILE_PATH="./Dockerfile" SERVICE_NAME="asset-assistant-frontend" # 服务容器名称,便于管理 HOST_PORT=8080 # 主机映射端口 CONTAINER_PORT=80 # 容器内部端口 log_info "===== 开始执行构建脚本 =====" # 步骤1:停止并删除现有容器(忽略不存在的情况) log_info "检查并停止现有容器: ${SERVICE_NAME}" if sudo docker rm -f "${SERVICE_NAME}" >/dev/null 2>&1; then log_info "容器 ${SERVICE_NAME} 已停止并删除" else log_warn "容器 ${SERVICE_NAME} 不存在,跳过删除步骤" fi # 步骤2:删除现有镜像(忽略不存在的情况) log_info "尝试删除现有镜像: ${FULL_IMAGE}" if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then log_info "镜像 ${FULL_IMAGE} 删除成功" else log_warn "镜像 ${FULL_IMAGE} 不存在或无法删除,跳过删除步骤" fi # 步骤3:构建新镜像 log_info "开始构建新镜像: ${FULL_IMAGE}(Dockerfile位于${DOCKERFILE_PATH})" if sudo docker build -t "${FULL_IMAGE}" -f Dockerfile .; then log_info "镜像 ${FULL_IMAGE} 构建成功" else log_error "镜像 ${FULL_IMAGE} 构建失败" exit 1 fi # 步骤4:启动服务 log_info "启动新容器: ${SERVICE_NAME}(${HOST_PORT}:${CONTAINER_PORT})" # 启动容器(后台运行、端口映射、命名容器) if sudo docker run -d -p "${HOST_PORT}:${CONTAINER_PORT}" --name "${SERVICE_NAME}" "${FULL_IMAGE}"; then log_info "容器 ${SERVICE_NAME} 启动成功,访问地址: http://localhost:${HOST_PORT}" else log_error "容器 ${SERVICE_NAME} 启动失败" exit 1 fi log_info "===== 构建脚本执行完成 ====="