OCR服务-本地打包docker+docker下载ssh调试

总问题

今天在将docling框架写好的OCR服务通过dockerfile的方式打包后进行部署,但是其中遇到了多个问题:

  1. 因为本地可能需要修改,需要去打包后的容器里面再去下载ssh和vim等,直接使用apt install是不能进行下载的
  2. 采用的dockerfile用的是python3.12-slim的基础镜像,在使用docling的OCR服务时会出现rapidocr_onnxruntime包下载了但是不能够使用

具体的操作请参考以下我的相关攥写文档

打包后操作

在打包好的docker中,通常是不允许直接使用apt来进行下载的,此时就需要通过以下方式来实现:

!!!此时会有一个很严重的问题,当容器重启后ssh服务不会自动启动,需要手动进入容器进行启动,这个对本地调试影响会很大,这点需要严重注意

复制代码
# 进入容器

# 更新源并安装
apt-get update
apt-get install -y openssh-server

# 安装 vim (可选,用于编辑配置)
apt-get install -y vim

# 设置 root 密码
passwd

# 安装完成后,编辑配置文件
vim /etc/ssh/sshd_config

# 将 #PermitRootLogin prohibit-password 改为 PermitRootLogin yes

# 创建运行目录
mkdir -p /var/run/sshd

# 启动 SSH 服务
service ssh start
# 或者
/usr/sbin/sshd

此处使用docling框架在Linux下面进行打包有一个很大的坑:

在docker的Linux下面在进行docling调用ocr服务去解析时,需要使用到libgl1和libglib2.0-0两个动态链接包

这个动态链接包是什么:

libGL.so.1**(OpenGL Library)**

  • 它的角色 :这是 OpenGL(开放图形库)的核心接口文件。
  • 它的功能:它的主要工作是指挥显卡(GPU)进行图像渲染、3D 建模绘制等。在桌面上,你玩游戏、看视频、用 Photoshop 都离不开它。

libglib2.0-0**(GLib Library)**

  • 它的角色 :这是 Linux 系统中最底层的 "瑞士军刀"库(General utility library)。
  • 它的功能 :它提供了数据结构(列表、树)、线程管理、事件循环等基础功能。它是图形界面库 GTK(类似于 Windows 的窗口管理器)的基石。

为什么Linux下的docker使用OCR服务要这两个动态链接包

首先这个docker采用的是python-3.12-slim是极简版的docker镜像,在维护时没有这种包,所以这个需要在dockerfile中执行相关的RUN命令进行安装。

A. "全家桶"的问题

标准的 opencv-python 包是为 "全功能" 设计的。它的开发者假设你可能会用到所有功能,包括:

  1. 读取图片(需要计算)
  2. 处理矩阵(需要计算)
  3. 显示图片( cv2.imshow**) ------ 关键点在这里!**

为了让你能运行 cv2.imshow() 弹出一个窗口看图片,OpenCV 在编译时就 硬链接(Hard Linked) 了桌面窗口系统(GTK/Qt)。

  • GTK 依赖 GLib (libglib2.0-0)。
  • 图像渲染 依赖 OpenGL (libGL.so.1)。
B. Linux 动态链接的"连坐"机制

当你在 Python 代码里写下 import cv2 (或 from rapidocr... 间接调用它) 时,Linux 的动态链接器(Dynamic Linker)开始工作:

  1. 它加载 cv2.so 文件。
  2. 它检查 cv2.so 依赖谁? -> 发现依赖 libGL.so.1
  3. 它去系统里找 libGL.so.1
  4. 如果找不到,链接器不仅会报错,还会直接拒绝加载整个 cv2****模块。

哪怕你这辈子都不会调用 cv2.imshow()****,哪怕你的代码全是后台纯计算,只要 import****这一步发生了,系统就必须核实所有依赖项都在场。

相关推荐
dazhong20124 分钟前
Docker 进阶篇(二) Docker Compose 部署 Nginx 实践
nginx·docker·容器
码--到成功11 分钟前
Docker、Kubernetes安装系列 一
docker·容器·kubernetes
与自己和解7412 小时前
使用ssh实现 VScode 直连 ubuntu
vscode·ubuntu·ssh
cui_hao_nan3 小时前
Docker学习3
docker·容器
玉&心3 小时前
在Docker中部署前端和后端的实现
运维·docker·容器
wdfk_prog3 小时前
Docker 常用语法与命令:CLI、Dockerfile 与 Compose 速查
运维·docker·容器
无敌糖果3 小时前
K8S network namespace错误分析
docker·容器·kubernetes
AI人工智能+3 小时前
证件阅读机,通过光学扫描、AI大脑、芯片感应三双“眼睛”协同工作,借助深度学习OCR引擎完成证卡识别与结构化输出
深度学习·ocr·智能硬件·证件阅读机
郝开4 小时前
Docker Compose 模块化多环境配置规范指南:示例搭建Kibana 9.4.2
docker·容器·kibana
虎王物联5 小时前
Docker BuildKit多阶段构建:IoT固件交叉编译流水线实战
运维·物联网·ci/cd·docker·容器·物联网嵌入式