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

相关推荐
小p21 小时前
docker学习: 2. 构建镜像Dockerfile
docker
小p2 天前
docker学习: 1. docker基本使用
docker
埃博拉酱2 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
崔小汤呀2 天前
Docker部署Nacos
docker·容器
缓解AI焦虑2 天前
Docker + K8s 部署大模型推理服务:资源划分与多实例调度
docker·容器
1candobetter2 天前
Docker Compose Build 与 Up 的区别:什么时候必须重建镜像
docker·容器·eureka
シ風箏3 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
zhangfeng11333 天前
趋动云 如何ssh登录 服务区 项目server
运维·人工智能·ssh
BugShare3 天前
继《小爱音响》详细说下怎么部署,尤其是关于Docker部分
docker·nas·xiaomusic
小马爱打代码3 天前
Docker:完全指南从入门到精通
运维·docker·容器