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****这一步发生了,系统就必须核实所有依赖项都在场。

相关推荐
Rabbit_QL1 天前
【网络设置】Docker 自定义网络深度解析:从踩坑到工程实践
网络·docker·容器
计算机小手1 天前
使用 Poste.io 自建邮件服务器,Docker一键快速部署
经验分享·docker
天意pt1 天前
Blog-SSR 系统操作手册(v1.0.0)
前端·vue.js·redis·mysql·docker·node.js·express
沫离痕1 天前
windows安装docker实例
windows·docker·容器
唯情于酒1 天前
Docker部署若依(前后端分离版)
vue.js·docker·容器
轩轶子1 天前
【Macbook环境配置】Macbook设置ssh免密登陆服务器
运维·服务器·ssh
主公不搬砖1 天前
Nacos 2.5.2 国产信创 kingbase适配
java·docker·nacos·信创·kingbase·国产适配
ysy16480672391 天前
Docker安装(Windows版)
windows·docker·容器
2501_940414081 天前
搞了一次平台工程,我把本地的 Docker Desktop 彻底卸了
运维·docker·容器
工具罗某人2 天前
docker快速部署kafka
java·nginx·docker