#!/bin/bash # 定义变量 CONTAINER_NAME="itc-ms-system" IMAGE_NAME="pcitc/itc-ms-system" IMAGE_VERSION="2025-08-04-0940" IMAGE_FULL="$IMAGE_NAME:$IMAGE_VERSION" PORT=8091 # 服务暴露端口 CONTAINER_PORT=8091 # 服务暴露端口 TZ="Asia/Shanghai" # 时区设置 # 环境变量配置 ENV_APP_PRO_FILE="test" file="$CONTAINER_NAME-version.txt" # 检查文件是否存在(假设 $file 是目标文件变量,已在别处定义) if [ ! -f "$file" ]; then echo "文件 $file 不存在" touch "$file" # 变量加引号,处理含空格的文件名 echo "$IMAGE_FULL" >> "$file" echo "记录版本【$IMAGE_FULL】到 $file" else # 检查参数数量(建议移到脚本开头统一检查) if [ $# -eq 2 ]; then IMAGE_FULL="$IMAGE_NAME:$2" echo "$IMAGE_FULL" >> "$file" echo "记录版本【$IMAGE_FULL】到 $file" else # 修正赋值语法:等号两侧无空格 last_version=$(tail -n 1 "$file") IMAGE_FULL="$last_version" # 建议添加对 $IMAGE_FULL 的后续处理(如使用该变量) fi fi # 显示帮助信息 show_help() { echo "使用方法: $0 [操作类型]" echo "操作类型:" echo " deploy - 部署并启动服务容器" echo " remove - 停止并删除容器及数据/日志目录" echo " logs - 查看容器日志" echo " help - 显示帮助信息" } # 部署服务 deploy_service() { echo "部署镜像【$IMAGE_FULL】" # 检查容器是否已存在,存在则停止并删除 if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "停止并删除现有容器: $CONTAINER_NAME" docker stop $CONTAINER_NAME >/dev/null docker rm $CONTAINER_NAME >/dev/null fi # 启动服务容器 echo "启动服务容器..." docker run -d --privileged --restart always \ --name $CONTAINER_NAME \ -p $PORT:$CONTAINER_PORT \ -e ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE \ $IMAGE_FULL # 检查启动状态 if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then echo "服务启动成功!" echo "容器名称: $CONTAINER_NAME" echo "访问地址: http://localhost:$PORT" echo "环境变量: ENV_APP_PRO_FILE=$ENV_APP_PRO_FILE" else echo "服务启动失败,日志如下:" docker logs $CONTAINER_NAME exit 1 fi } # 删除服务 remove_service() { # 检查容器是否存在 if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "停止容器: $CONTAINER_NAME" docker stop $CONTAINER_NAME >/dev/null echo "删除容器: $CONTAINER_NAME" docker rm $CONTAINER_NAME >/dev/null else echo "容器 $CONTAINER_NAME 不存在" fi } # 查看日志 show_logs() { if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..." docker logs -f $CONTAINER_NAME else echo "容器 $CONTAINER_NAME 不存在" fi } # 主逻辑 if [ $# -lt 1 ]; then show_help exit 1 fi case "$1" in deploy) deploy_service ;; remove) remove_service ;; logs) show_logs ;; help) show_help ;; *) echo "无效的操作类型: $1" show_help exit 1 ;; esac