Ver Fonte

feat: 添加 curl_ollama.sh 和 docker_startup_7085.sh 脚本以支持 DeepOCR 服务的启动和验证码提取功能

zhch158_admin há 3 meses atrás
pai
commit
a5e66d5700
2 ficheiros alterados com 570 adições e 0 exclusões
  1. 37 0
      zhch/shell/curl_ollama.sh
  2. 533 0
      zhch/shell/docker_startup_7085.sh

+ 37 - 0
zhch/shell/curl_ollama.sh

@@ -0,0 +1,37 @@
+#!/bin/bash
+
+# 检查图片文件是否存在
+if [ ! -f "./sample_data/PictureCheckCode.jpeg" ]; then
+    echo "错误:图片文件不存在"
+    exit 1
+fi
+
+# 将图片转换为 base64
+image1_base64=$(base64 -i ./sample_data/PictureCheckCode.jpeg)
+
+# 检查 base64 转换是否成功
+if [ -z "$image1_base64" ]; then
+    echo "错误:base64 转换失败"
+    exit 1
+fi
+
+# 第一个请求:提取验证码
+echo "发送第一个请求..."
+response=$(curl -X POST "http://localhost:11434/api/generate" \
+    -H "Content-Type: application/json" \
+    --max-time 300 \
+    --silent \
+    --data "{
+        \"model\": \"gemma3n\",
+        \"prompt\": \"提取图片中的验证码,只返回数字\",
+        \"images\": [\"${image1_base64}\"],
+        \"stream\": false
+    }")
+
+# 检查响应
+if [ $? -eq 0 ]; then
+    echo "响应:"
+    echo "$response" | jq -r '.response' 2>/dev/null || echo "$response"
+else
+    echo "请求失败"
+fi

+ 533 - 0
zhch/shell/docker_startup_7085.sh

@@ -0,0 +1,533 @@
+#########################################################################
+# File Name: docker_start.sh
+# Version: v1.3
+# Author: yangyangen
+# Mail: yangyangen@exocr.com
+# Created Time: 2024-12-19 12:39:10
+#########################################################################
+
+#!/bin/bash
+# startup docker container
+
+echo "-----------------------------易道博识DeepOCR识别服务Docker版本执行开始--------------------------------"
+
+port="7085" # 设置docker run -p参数中对外映射的端口号
+
+nvidia="5" # 设置要挂载的Nvidia显卡,默认全部显卡all,如果要修改指定显卡的话,举例:nvidia="0,2,3"
+
+forward="y" # 设置docker容器的端口转发模式:
+# 当forward="y"时,使用-p和--mac-address参数生效:将容器的端口映射到主机的端口上,可以从主机访问容器内部的服务;允许在启动容器时指定一个固定的 MAC 地址。
+# 当forward="n"时,指定对外映射端口的port参数和指定mac地址参数不在生效,将使用容器内的server.conf配置文件中指定的端口。表示容器内的所有端口将直接暴露在主机上,意味着容器和主机共享使用网络接口、IP 地址和端口。
+
+use_cpu="n" # 设置OCR识别服务是否需要CPU方式启动,y表示使用cpu模式,n表示不使用cpu模式,默认为不使用CPU模式。
+
+ip_port_node="5000" # 设置docker run -p参数中容器内的端口号,通常禁止修改,除非很清楚的知道修改该参数值的意义和造成的影响。
+
+pod_name="httpsrv_7085" # 指定容器名称,默认即可,通常不建议修改,否则会影响docker_shutdown.sh脚本的执行过程
+
+# 检查 forward 是否为 y 或 n
+if [[ "$forward" != "y" && "$forward" != "n" ]]; then
+    echo "报错:forward 参数的值无效,请修改为等于 y 或 n。"
+    exit 1
+fi
+
+
+# 检查 forward 是否为 y 或 n
+if [[ "$use_cpu" != "y" && "$use_cpu" != "n" ]]; then
+    echo "报错:use_cpu 参数的值无效,请修改为等于 y 或 n。"
+    exit 1
+fi
+
+
+# 检查系统是否安装了系统常见的命令工具包
+packages_list=(
+    "pciutils" # 用于支持lspci命令
+    "iproute" # 用于支持ss命令
+)
+
+# 用来记录未安装的包
+missing_packages_list=()
+
+
+echo "检查以下系统依赖相关部署包是否已安装:"
+for package in "${packages_list[@]}"; do
+    if command -v dpkg &>/dev/null; then
+        pkg_check_cmd="dpkg -l"
+        pkg_name_check_cmd="dpkg -s"
+    elif command -v rpm &>/dev/null; then
+        pkg_check_cmd="rpm -q"
+        pkg_name_check_cmd="rpm -q"
+    else
+        echo "错误:无法找到适用的包管理工具(dpkg 或 rpm)。"
+        exit 1
+    fi
+
+    # 检查包是否已安装
+    if $pkg_check_cmd "$package" &>/dev/null; then
+        echo "$package 已安装"
+    else
+        echo "$package 未安装"
+        missing_packages_list+=("$package")
+    fi
+done
+
+# 如果有未安装的包,则退出并提示
+if [ ${#missing_packages_list[@]} -gt 0 ]; then
+    echo "错误:以下部署包未安装,请安装后再试。"
+    for pkg in "${missing_packages_list[@]}"; do
+        echo "- $pkg"
+    done
+    exit 1
+fi
+
+echo "-------------------------------------------------------------------------------------------------"
+
+# 检查端口号是否为合法数字,且在有效范围内
+if [ "$forward" = "y" ]; then
+    if ! [[ "$port" =~ ^[1-9][0-9]{0,4}$ ]] || (( port < 1 || port > 65535 )); then
+        echo "报错:端口号 $port 无效。端口号必须是1到65535之间的正整数。"
+        exit 1
+    fi
+    # 检查端口号是否已被占用
+    if ss -tuln | grep ":$port " > /dev/null; then
+        echo "报错:端口号 $port 已被占用。"
+        exit 1
+    fi
+    # 端口号校验通过
+    echo "DeepOCR服务端口号为 $port 校验通过,可以使用。"
+
+    forwarding=$(sysctl net.ipv4.ip_forward | awk '{print $3}')
+    if [ "$forwarding" -eq 1 ]; then
+        echo "IPv4转发已开启。"
+    else
+        echo "报错:IPv4转发未开启,端口转发功能不可用,IPv4开启方法请参考:"
+        echo "1.临时开启IPv4转发:临时开启会在操作系统重启后失效,执行命令为:sudo sysctl -w net.ipv4.ip_forward=1"
+        echo "2.永久开启IPv4转发:请在/etc/sysctl.conf文件中将net.ipv4.ip_forward的值改为1,然后:wq进行保存。"
+        echo "请注意:必须运行该命令将设置的参数生效:sudo sysctl -p && sudo systemctl restart docker"
+        exit 1
+    fi
+
+else
+    # 如果 forward="n",提示不进行端口号校验
+    echo "跳过转发的端口号校验,将使用 ${pod_name} 容器中DeepOCR服务的 /root/dist/conf/server.conf 中配置的端口进行对外访问。"
+    echo "请检查 ${pod_name} 容器内的DeeoOCR端口号与宿主机端口号是否冲突,端口号是否被其他程序占用。"
+fi
+
+
+echo "-------------------------------------------------------------------------------------------------"
+
+# 检查是否存在 log 目录,如果没有则创建
+if [ ! -d "./log_7085/" ]; then
+  # 尝试创建 log 目录
+  if ! mkdir -p log_7085; then
+    echo "报错:无法创建 log 目录,可能是没有写入权限。"
+    exit 1
+  fi
+  log_created=true
+else
+  # 检查是否有写入权限
+  if [ ! -w "./log_7085" ]; then
+    echo "报错:log 目录存在,但没有写入权限。"
+    exit 1
+  fi
+  log_created=true
+fi
+
+# 如果目录创建成功并且有权限,输出创建成功的信息
+if [ "$log_created" = true ]; then
+  echo "已创建DeepOCR服务日志目录,绝对路径为:$PWD/log"
+  echo "日志名称默认为:httplog.txt,可以通过修改DeepOCR的server.conf配置文件的suffix=y参数进行控制是否要对脚本添加主机名,例如日志格式为:httplog_testdemo.txt"
+fi
+
+echo "-------------------------------------------------------------------------------------------------"
+
+# 查找当前目录下的所有.lic文件
+lic_file=($(find . -maxdepth 1 -type f -name '*.lic'))
+
+# 检查是否找到了lic授权文件
+if [ ${#lic_file[@]} -eq 0 ]; then
+    echo "报错:没有找到后缀为.lic的授权文件。"
+    exit 1
+elif [ ${#lic_file[@]} -gt 1 ]; then
+    echo "报错:发现多个后缀为lic文件,请只保留一个。"
+    exit 1
+fi
+echo "当前目录下的授权文件名称为: $(basename "$lic_file")"
+
+echo "-------------------------------------------------------------------------------------------------"
+
+# 检查 Docker 是否安装,并且版本是否大于等于 19.06
+if command -v docker &> /dev/null; then
+    # 获取 Docker 版本
+    docker_version=$(docker --version | awk '{print $3}' | sed 's/,//')
+
+    # 提取主版本号和次版本号
+    IFS='.' read -r major minor patch <<< "$docker_version"
+
+    # 删除次版本号的前导零
+    minor=$(echo $minor | sed 's/^0*//')
+
+    # 检查版本是否大于等于 18.06
+    if [ "$major" -gt 19 ] || { [ "$major" -eq 19 ] && [ "$minor" -ge 6 ]; }; then
+        echo "Docker已安装,版本号为:$docker_version,符合版本要求。"
+    else
+        echo "报错:Docker版本 $docker_version 小于 19.06,不符合版本要求,请升级到 Docker 19.06 或以上版本。"
+        exit 1
+    fi
+
+    # 检查 Docker 服务是否启动并正常运行
+    if systemctl is-active --quiet docker; then
+        echo "Docker服务已启动并正常运行。"
+    else
+        echo "报错:Docker服务未启动或运行异常,可执行命令尝试重新启动 Docker 服务:sudo systemctl restart docker"
+        exit 1
+    fi
+else
+    echo "报错:Docker服务未安装,请联系易道博识获取 Docker 部署包和部署手册,待安装 Docker 后重试。"
+    exit 1
+fi
+
+
+
+echo "-------------------------------------------------------------------------------------------------"
+
+# 检查当前用户是否具有执行docker命令的权限
+# 检查当前用户是否是 root
+if [ "$(whoami)" = "root" ]; then
+    echo "当前用户 $(whoami) 有权限执行 Docker 命令。"
+else
+    # 检查当前用户是否在 docker 组中
+    if ! groups $(whoami) | grep -q '\bdocker\b'; then
+        echo "报错:当前用户 $(whoami) 不在 docker 组中,无法执行 Docker 命令。"
+        echo "请将当前用户添加到 docker 组:sudo usermod -aG docker $(whoami)"
+        echo "然后退出bash并重新登录,或者运行 'newgrp docker' 来应用更改。"
+        exit 1
+    else
+        echo "当前用户 $(whoami) 有权限执行 Docker 命令。"
+    fi
+fi
+
+echo "-------------------------------------------------------------------------------------------------"
+
+
+# 检查设置模型使用显卡显存的系数。
+# 初始化环境变量命令
+env_command=""
+
+if [ $# -eq 2 ]; then
+    echo "设置模型使用显卡显存的系数的环境变量"
+    arg1="$1"
+    arg2="$2"
+
+    if [ "$1" != "limit_gpu_memory" ]; then
+        echo "参数错误:第一个参数只能是 'limit_gpu_memory'"
+        exit 1
+    fi
+
+    if [ "$arg1" = "limit_gpu_memory" ]; then
+        # 检查第二个参数是否为小数点后最多两位的小数,并且值不大于1.0
+        if [[ "$arg2" =~ ^0(\.[0-9]{1,2})?$|^1(\.0{1,2})?$ ]]; then
+            env_command="-e TF_PER_PROCESS_GPU_MEMORY_FRACTION=$arg2"
+            # echo "env set $arg1=$arg2"
+        else
+            echo "请将limit_gpu_memory的值修改为小于1.0的浮点值,小数点后保留两位"
+            exit 1
+        fi
+    fi
+fi
+
+if [ -z "$env_command" ]; then
+    echo "没有指定 limit_gpu_memory 的显存系数。"
+else
+    echo "limit_gpu_memory 的显存系数为:$arg1=$arg2"
+fi
+
+
+echo "-------------------------------------------------------------------------------------------------"
+
+# 检查docker中是否存在当前需要部署的docker镜像
+if [ ! -s version.txt ]; then
+    echo "报错:文件 version.txt 不存在或内容为空。"
+    exit 1
+fi
+image_name=$(cat version.txt)
+
+if docker inspect --type=image $image_name &> /dev/null; then
+    echo "镜像为 $image_name 已存在,无需重复导入"
+else
+    echo "请耐心等待,正在导入Docker镜像"
+    if ! docker load -i ${PWD}/Deep_OCR_Docker.tar; then
+        echo "导入Docker镜像失败"
+        exit 1
+    fi
+    echo "导入已完成,镜像名称为: ${image_name}"
+fi
+
+
+echo "-------------------------------------------------------------------------------------------------"
+
+# 查找当前目录下的server.conf配置文件
+server_conf=$(find . -maxdepth 1 -type f -name 'server.conf')
+server_conf_arg=""
+if [ -n "$server_conf" ]; then
+  server_conf_arg="-v ${PWD}/server.conf:/root/dist/conf/server.conf"
+  echo "已向容器内部映射server.conf文件"
+fi
+
+# 查找当前目录下的httpsrv启动文件
+httpsrv=$(find . -maxdepth 1 -type f -name 'httpsrv')
+httpsrv_arg=""
+if [ -n "$httpsrv" ]; then
+  chmod +x httpsrv
+  httpsrv_arg="-v ${PWD}/httpsrv:/root/dist/httpsrv/httpsrv"
+  echo "已向容器内部映射httpsrv文件"
+fi
+
+# 查找当前目录下的apis.conf启动文件
+apis_conf=$(find . -maxdepth 1 -type f -name 'apis.conf')
+apis_conf_arg=""
+if [ -n "$apis_conf" ]; then
+  apis_conf_arg="-v ${PWD}/apis.conf:/root/dist/conf/apis.conf"
+  echo "已向容器内部映射apis.conf文件"
+fi
+
+# 查找当前目录下的libpywrap_tc.so启动文件
+libpywrap_tc=$(find . -maxdepth 1 -type f -name 'libpywrap_tc.so')
+libpywrap_tc_arg=""
+if [ -n "$libpywrap_tc" ]; then
+  libpywrap_tc_arg="-v ${PWD}/libpywrap_tc.so:/root/dist/httpsrv/libpywrap_tc.so"
+  echo "已向容器内部映射libpywrap_tc.so文件"
+fi
+
+# 查找当前目录下的libpywrap.so启动文件
+libpywrap=$(find . -maxdepth 1 -type f -name 'libpywrap.so')
+libpywrap_arg=""
+if [ -n "$libpywrap" ]; then
+  libpywrap_arg="-v ${PWD}/libpywrap.so:/root/dist/httpsrv/libpywrap.so"
+  echo "已向容器内部映射libpywrap.so文件"
+fi
+
+# 查找当前目录下的libpywrap.so启动文件
+libpaddle_inference=$(find . -maxdepth 1 -type f -name 'libpaddle_inference.so')
+libpaddle_inference_arg=""
+if [ -n "$libpaddle_inference" ]; then
+  libpaddle_inference_arg="-v ${PWD}/libpaddle_inference.so:/root/dist/httpsrv/libpaddle_inference.so"
+  echo "已向容器内部映射libpaddle_inference.so文件,建议仅限CPU模式时使用。"
+fi
+
+echo "-------------------------------------------------------------------------------------------------"
+
+# 检查系统是否安装了 nvidia-smi 驱动工具,并且是否有显卡设备
+nvidia_gpus=""
+# 设置cpu模式的docker命令参数
+cpu_mode=""
+packages=(
+    "libnvidia-container1" # docker挂载显卡时需要
+    "nvidia-container-toolkit" # docker挂载显卡时需要
+    #"nvidia-container-toolkit-base"
+    "libnvidia-container-tools" # docker挂载显卡时需要
+)
+
+
+# 用来记录未安装的包
+missing_packages=()
+if [ -f "./libpaddle_inference.so" ] || [ "$use_cpu" = "y" ]; then
+    echo "检测到当前目录下存在 libpaddle_inference.so 文件,或者环境变量 use_cpu=y ,跳过显卡加载过程。将使用 CPU 模式启动OCR识别服务。"
+    cpu_mode="-e use_cpu=y"
+    nvidia_gpus="" # 如果检测到该文件,设置显卡挂载为空
+else
+    cpu_mode=""
+    # 检查 PCIe 总线上是否存在 NVIDIA 硬件设备
+    if lspci | grep -i "nvidia" >/dev/null 2>&1; then
+        echo "检测到 NVIDIA 显卡硬件设备。"
+
+        # 检查是否安装了 nvidia-smi 驱动工具
+        if command -v nvidia-smi &>/dev/null; then
+            echo "检测到 nvidia-smi 驱动工具。"
+
+            # 检查是否可以检测到 NVIDIA GPU
+            if nvidia-smi -L >/dev/null 2>&1; then
+                echo "已检测到 NVIDIA GPU。"
+                # 根据 nvidia 的值来设置 nvidia_gpus
+                if [ "$nvidia" = "all" ]; then
+                    nvidia_gpus="--gpus all"
+                    echo "默认已向容器内部挂载所有 NVIDIA 显卡。"
+                elif [[ "$nvidia" =~ ^[0-9,]+$ ]]; then
+                    nvidia_gpus="--gpus '\"device=$nvidia\"'"
+                    echo "指定了显卡设备 $nvidia,已挂载指定显卡。"
+                else
+                    echo "警告:指定的显卡的内容格式无效,无法挂载。请重新修改第16行的值。"
+                    nvidia_gpus=""
+                    exit 1
+                fi
+                # 如果检测到显卡驱动,才检查相关的 NVIDIA 容器包
+                echo "检查以下 NVIDIA 相关部署包是否已安装:"
+                for package in "${packages[@]}"; do
+                    if command -v dpkg &>/dev/null; then
+                        pkg_check_cmd="dpkg -l"
+                        pkg_name_check_cmd="dpkg -s"
+                    elif command -v rpm &>/dev/null; then
+                        pkg_check_cmd="rpm -q"
+                        pkg_name_check_cmd="rpm -q"
+                    else
+                        echo "错误:无法找到适用的包管理工具(dpkg 或 rpm)。"
+                        exit 1
+                    fi
+
+                    # 检查包是否已安装
+                    if $pkg_check_cmd "$package" &>/dev/null; then
+                        echo "$package 已安装"
+                    else
+                        echo "$package 未安装"
+                        missing_packages+=("$package")
+                    fi
+                done
+
+                # 如果有未安装的包,则退出并提示
+                if [ ${#missing_packages[@]} -gt 0 ]; then
+                    echo "错误:以下部署包未安装,不能挂载nvidia显卡设备到OCR识别容器中进行使用,请安装后再试。"
+                    for pkg in "${missing_packages[@]}"; do
+                        echo "- $pkg"
+                    done
+                    exit 1
+                fi
+            else
+                echo "警告:未检测到 NVIDIA GPU,可能是驱动安装不正确或没有 GPU 显卡。将使用CPU模式运行OCR服务。CPU模式请修改该启动脚本的第22行为use_cpu="y",或者请联系易道博识获取 libpaddle_inference.so 文件才能进行识别。"
+                nvidia_gpus=""
+            fi
+        else
+            echo "警告:未检测到 nvidia-smi 驱动工具,无法使用 NVIDIA 显卡,将使用CPU模式运行OCR服务。CPU模式请修改该启动脚本的第22行为use_cpu="y",或者请联系易道博识获取 libpaddle_inference.so 文件才能进行识别。"
+            nvidia_gpus=""
+        fi
+    else
+        echo "警告:未检测到 NVIDIA 显卡硬件设备,将使用CPU模式运行OCR服务。CPU模式请修改该启动脚本的第22行为use_cpu="y",或者请联系易道博识获取 libpaddle_inference.so 文件才能进行识别。"
+        nvidia_gpus=""
+    fi
+fi
+
+echo "挂载到 ${pod_name} 容器内的显卡为:nvidia_gpus: $nvidia_gpus"
+
+echo "-------------------------------------------------------------------------------------------------"
+
+network=""
+mac_address=""
+# 如果 forward 为 y,检测 MAC 地址和端口号
+if [ "$forward" = "y" ]; then
+    # 获取已启动并有效网卡的 MAC 地址
+    mac_address=$(ip link show | awk '/state UP/ && !/lo/ {getline; print $2; exit}')
+
+    if [ -z "$mac_address" ]; then
+        echo "警告:没有检测到已启动并且有效的网卡MAC地址。"
+        exit 1
+    fi
+    ip_port="-p ${port}:${ip_port_node}"
+    mac_address="--mac-address ${mac_address}"
+    echo "检测到的MAC地址为: ${mac_address}"
+    echo "指定端口映射为:${ip_port}"
+
+else
+    # 如果 forward 为 n,设置 network 为 host
+    network="--network host"
+    echo "指定 ${pod_name} 容器使用 主机网络模式 :${network}"
+    echo "对外映射端口的 port 参数不在生效,将使用 ${pod_name} 容器内的 /root/dist/conf/server.conf 配置文件中 listening_port 指定的端口。"
+
+fi
+
+echo "-------------------------------------------------------------------------------------------------"
+docker_cmd="docker run -itd --name=${pod_name} \
+  ${ip_port} \
+  ${network} \
+  ${cpu_mode} \
+  ${mac_address} \
+  ${nvidia_gpus} \
+  --restart=on-failure \
+  --workdir /root/dist \
+  -v ${PWD}/log_7085:/root/dist/log \
+  -v ${PWD}/$(basename $lic_file):/root/dist/licence/$(basename $lic_file) \
+  -v ${PWD}/ptxas.12.2:/root/dist/httpsrv/ptxas \
+  -v /usr/lib/x86_64-linux-gnu/libcuda.so.570.169:/root/dist/httpsrv/libcuda.so.1 \
+  -v /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.570.169:/root/dist/httpsrv/libnvidia-ml.so.1 \
+  ${libpaddle_inference_arg} \
+  ${apis_conf_arg} \
+  ${env_command} \
+  ${server_conf_arg} \
+  ${httpsrv_arg} \
+  ${libpywrap_tc_arg} \
+  ${libpywrap_arg} \
+  ${image_name} sh startup.sh"
+
+# 打印完整的 docker run 命令
+echo "执行的 Docker 命令为:$docker_cmd"
+
+# 执行 docker run 命令
+if ! eval "$docker_cmd"; then
+    echo "启动 Docker 容器失败"
+    exit 1
+fi
+
+echo "------------------${pod_name} 容器已启动,正在检查容器运行状态,请耐心等待------------------------------"
+
+# 获取 容器的 ID 或名称
+container_id=$(docker ps -aq  --filter "name=^${pod_name}$" | tr -d '\r\n\t ')
+
+# 等待 3 秒后,检查容器状态
+sleep 3
+
+# 获取容器当前的状态
+container_status=$(docker inspect --format '{{.State.Status}}' $container_id | tr -d '\r\n\t ')
+
+# 如果容器状态是 running,则认为启动成功
+if [ "$container_status" == "running" ]; then
+    # 再次确认 3 秒内容器状态是否稳定为 running
+    sleep 3
+    container_status=$(docker inspect --format '{{.State.Status}}' $container_id | tr -d '\r\n\t ')
+
+    if [ "$container_status" == "running" ]; then
+        echo "易道博识Docker版本DeepOCR服务启动完成。 ${pod_name} 容器状态为:$container_status"
+    else
+        echo "Docker中容器名称为 ${pod_name} 启动失败,再次检查容器状态不再是 running。当前状态为:$container_status ,请联系易道博识的技术支持人员排查问题。"
+        exit 1
+    fi
+else
+    echo "报错:Docker中容器名称为 ${pod_name} 启动失败,容器状态为:$container_status ,请联系易道博识的技术支持人员排查问题。"
+    exit 1
+fi
+
+echo "-------------------------------------------------------------------------------------------------"
+
+# 根据不同的端口映射方式,输出不同提示内容
+listening_port=$(docker exec -it ${pod_name} bash -c "grep '^listening_port' /root/dist/conf/server.conf | awk -F'=' '{print \$2}'" | tr -d '\r\n\t ')
+port_value=$(echo $ip_port | cut -d ':' -f 2)
+
+
+if [ "$forward" = "y" ]; then
+    # 检查 listening_port 和 port_value 是否一致
+    if [ "$listening_port" != "$port_value" ]; then
+        echo "警告:${pod_name} 容器虽然启动成功,但是 ${pod_name} 容器内/root/dist/conf/server.conf的listening_port:($listening_port) 与 脚本第21行的 ip_port_node :($ip_port_node) 中指定容器内端口号不一致!"
+        echo "请将 ${pod_name} 容器内/root/dist/conf/server.conf的listening_port:($listening_port) ,修改为默认的 (5000);或者修改本脚本第22行 ip_port_node 的值与之保持一致。"
+        echo "修改一致后,需要停止并删除运行当前 ${pod_name} 容器后: docker rm -f ${pod_name} ,重新执行该脚本再次启动容器生效。"
+        exit 1
+    fi
+    echo "DeepOCR服务当前端口号为:${port},如需修改DeepOCR转发端口号,请将该脚本第14行 port 的 ${port} 修改为指定的有效值。"
+    echo "查看DeepOCR服务的版本号:curl http://localhost:${port}/version"
+    echo "查看DeepOCR服务授权信息:curl http://localhost:${port}/authorize"
+else
+    # 如果 forward="n",提示不进行端口号校验
+    # 使用 docker exec 获取 listening_port,并去除多余的换行符或空格
+    echo "DeepOCR服务当前端口号为:$listening_port"
+    # 检查端口号是否已被占用
+    if ss -tuln | grep ":$listening_port " > /dev/null; then
+        echo "报错:httpsrv 容器内的 /root/dist/conf/server.conf 中配置的 listening_port 端口号 $listening_port 已被占用。"
+        echo "端口号与宿主机共用,如需指定DeepOCR服务端口,请对 ${pod_name} 容器内的 /root/dist/conf/server.conf 中配置的 listening_port 端口进行修改,已确保端口号不与其他进程端口号造成冲突。"
+        exit 1
+    fi
+    echo "查看DeepOCR服务的版本号:curl http://localhost:${listening_port}/version"
+    echo "查看DeepOCR服务授权信息:curl http://localhost:${listening_port}/authorize"
+fi
+
+
+echo "1.如需限制OCR模型占用显卡显存资源,可以执行命令,例如:./docker_startup.sh limit_gpu_memory 0.8"
+echo "2.如需查看服务日志,可以通过执行命令:tail -100f log/httplog.txt 或 docker exec -it ${pod_name} tail -f log/httplog.txt"
+echo "3.如需查看服务运行状态,可以通过执行命令:docker ps -a | grep ${pod_name}"
+echo "4.如需查看容器内的DeepOR服务进程运行情况,可以通过执行命令:docker exec -it ${pod_name} ps -ef | grep httpsrv"
+echo "---------------------------易道博识DeepOCR识别服务Docker版本执行已完毕-------------------------------"