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

相关推荐
我是谁??44 分钟前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
运维瓦工1 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
云烟成雨TD1 小时前
Spring AI 1.x 系列【59】容器化开发支持:Docker Compose 与 Testcontainers
人工智能·spring·docker
Plastic garden2 小时前
K8s(10)NFS 的动态 PV 创建数据库给k8s的mysql和redis
docker·容器·kubernetes
与海boy2 小时前
docker compose minio
docker·容器·eureka
JimCarter2 小时前
使用Azure Devops Pipeline将Docker应用部署到你的Raspberry Pi上
docker·azure·树莓派·devops·orangepi·香橙派·raspberrypi
武子康3 小时前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose
旅僧4 小时前
Ubantu docker环境配置(前置)
运维·docker·容器
“码”力全开4 小时前
解耦异构算力:基于 Docker 与边缘计算的 AI 视频管理平台,实现 GB28181/RTSP 统一接入与源码交付深度解析
人工智能·docker·边缘计算