| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533 |
- #########################################################################
- # 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版本执行已完毕-------------------------------"
|