OCRmyPDF 的 Docker 镜像

OCRmyPDF 提供预打包所有最新依赖的 Docker 镜像。对于已安装 Docker 的用户,这是便捷的使用方式。

在非 Linux 平台上,Docker 运行于虚拟机中,性能可能略低。建议根据需求调整 Docker 虚拟机的内存和 CPU 分配。Linux 平台下,Docker 镜像以原生性能运行。

安装 Docker 镜像

若系统中已安装 Docker,可获取最新版镜像:

  1. docker pull jbarlow83/ocrmypdf-alpine

可用镜像列表:

镜像名称 架构支持 说明
jbarlow83/ocrmypdf-alpine x86_64 和 arm64 推荐镜像,基于 Alpine Linux。
jbarlow83/ocrmypdf-ubuntu x86_64 和 arm64 备用镜像,基于 Ubuntu。当 Alpine 镜像稳定支持 arm64 后,此镜像将弃用。
jbarlow83/ocrmypdf x86_64 和 arm64 当前为 ocrmypdf-ubuntu 的别名。未来将指向 Alpine 镜像。建议普通用户使用。

注意ocrmypdf 镜像已弃用,未来将移除。

性能优化建议

OCRmyPDF 会使用所有可用 CPU 核心。在 macOS/Windows 的 Docker 环境中,建议通过 调整内存和 CPU 分配 提升性能。Linux 系统会自动获取全部资源。

命令行使用指南

与常规 Docker 容器不同,OCRmyPDF 容器为临时性——执行单个 OCR 任务后终止,行为类似命令行工具。因此我们通常使用 --rm 参数在退出时删除容器。

基础启动命令:

  1. docker run --rm -i jbarlow83/ocrmypdf-alpine [其他参数...] - -

便捷用法

方案一:通过标准输入输出流操作

创建 shell 别名简化命令:

  1. alias docker_ocrmypdf='docker run --rm -i jbarlow83/ocrmypdf-alpine'
  2. # 测试版本
  3. docker_ocrmypdf --version
  4. # 文件转换示例
  5. docker_ocrmypdf - - <input.pdf >output.pdf

方案二:挂载本地工作目录

通过卷映射避免权限问题:

  1. alias docker_ocrmypdf='docker run --rm -i --user "$(id -u):$(id -g)" --workdir /data -v "$PWD:/data" jbarlow83/ocrmypdf-alpine'
  2. # 转换文件
  3. docker_ocrmypdf /data/input.pdf /data/output.pdf

Podman 用户专用配置

使用 Podman 或 SELinux 系统时需额外参数:

  1. alias podman_ocrmypdf='podman run --rm -i --user "$(id -u):$(id -g)" --userns keep-id --workdir /data -v "$PWD:/data" ocrmypdf'
  2. # SELinux 环境下添加卷标签后缀
  3. podman_ocrmypdf /data/input.pdf /data/output.pdf

提示:SELinux 用户需在卷路径后添加 :Z 标签,或使用 --security-opt label=disable 禁用安全标签。

扩展镜像功能

添加多语言支持

默认包含英语、德语、简体中文、法语、葡萄牙语和西班牙语。扩展语言示例:

方法一:通过 Dockerfile 扩展

  1. FROM jbarlow83/ocrmypdf-alpine:<指定版本标签>
  2. # 添加意大利语支持
  3. RUN apk add tesseract-ocr-ita

方法二:动态注入语言包

  1. 查询 Tesseract 数据版本:
  1. docker run -i --rm --entrypoint /bin/ls jbarlow83/ocrmypdf /usr/share/tesseract-ocr
  1. 复制自定义训练数据:
  1. docker cp custom.traineddata 容器名:/usr/share/tesseract-ocr/<版本号>/tessdata/

重要:自定义镜像时务必固定基础镜像版本号,避免兼容性问题。

高级操作指南

执行测试套件

  1. docker run --rm --entrypoint python jbarlow83/ocrmypdf -m pytest

进入交互式 Shell

  1. docker run -it --entrypoint sh jbarlow83/ocrmypdf-alpine

启用 Web 服务(演示用途)

启动简易 HTTP 服务:

  1. docker run -p 5000:5000 --entrypoint python jbarlow83/ocrmypdf webservice.py

安全警告

  • 此服务仅用于演示/开发,无任何安全防护
  • 使用单线程 Flask 开发服务器,性能有限
  • 客户端需保持长连接,OCR 期间无法响应其他请求
  • 授权协议变更为 AGPLv3(因 Ghostscript 依赖)

生产环境建议:如需部署 OCR 服务,请参考 OCRmyPDF 云端服务指南,采用专业级解决方案。