python(44) : docker构建支持消费rocketmq的客户端

1.需求

基于python:3.10-slim镜像部署python服务, 其中会消费rocketmq, 消费报错 ,如下

File "/app/main.py", line 6, in <module>

from consumer.rocketmq_consumer import consumer

File "/app/consumer/rocketmq_consumer.py", line 12, in <module>

from rocketmq.client import ConsumeStatus

File "/usr/local/lib/python3.10/site-packages/rocketmq/client.py", line 24, in <module>

from .ffi import (

File "/usr/local/lib/python3.10/site-packages/rocketmq/ffi.py", line 40, in <module>

raise ImportError('rocketmq dynamic library not found')

ImportError: rocketmq dynamic library not found

2.原因

是因为 Python 的 rocketmq-client-python 包依赖一个 C/C++ 编写的动态链接库(librocketmq.so ,但在你的容器环境(基于 python:3.10-slim)中 没有安装这个底层库,导致无法加载。

2.1.错误原因分析

  • python:3.10-slim 是一个极简镜像,缺少编译和运行原生扩展所需的工具链和库。
  • rocketmq.client 使用了 cffi 调用 RocketMQ 的 C++ 客户端(通过 JNI 或 librocketmq)。
  • librocketmq.so 没有被自动安装或找不到路径。

2.2.解决方案

你需要在 Docker 镜像中:

  1. 安装系统依赖
  2. 下载并编译安装 librocketmq 动态库
  3. 确保 Python 包能正确找到它

3.解决方法

3.1.下载RocketMQ C++ 客户端的预编译二进制版本(bin-release)

RocketMQ C++ 客户端的预编译二进制版本(bin-release) ,已经包含了编译好的动态库(如 librocketmq.so),你只需要把它解压并放到系统能识别的路径中即可,无需再安装 cmakebuild-essential 等编译工具

Releases · apache/rocketmq-client-cpp

下载[rocketmq-client-cpp-2.2.0-bin-release.tar.gz]即可

3.2.创建文件

build.sh

复制代码
cp requirements.txt .

# 删除名为 py_rocketmq:0.1 的本地 Docker 镜像(如果存在)
docker rmi py_rocketmq:0.1

# 解压并整理 rocketmq-client-cpp 库文件(必须linux解压, win解压有问题)
tar -zxvf rocketmq-client-cpp-2.0.0-bin-release.tar.gz
tar -zxvf rocketmq-client-cpp-2.0.0-bin-release/centos7/rocketmq-client-cpp-2.0.0-bin-release.tar.gz
mkdir -p package
mv rocketmq-client-cpp/include package
mv rocketmq-client-cpp/lib package
rm -rf rocketmq-client-cpp
rm -rf rocketmq-client-cpp-2.0.0-bin-release

# 使用当前目录下的 Dockerfile 构建新的 py_rocketmq:0.1 镜像
docker build -t py_rocketmq:0.1 .  --no-cache

rm -rf package

Dockerfile

复制代码
# 使用Python 3.11官方镜像作为基础镜像
FROM python:3.10-slim

WORKDIR /app

COPY package .
COPY requirements.txt .

RUN cp -r /app/lib/* /usr/local/lib/ \
    && cp -r /app/include/* /usr/local/include/ \
    && ldconfig

# 设置库路径
ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

# 升级pip
RUN python -m pip install --upgrade pip  -i https://mirrors.aliyun.com/pypi/simple/ requests

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt  -i https://mirrors.aliyun.com/pypi/simple/ requests

3.3.构建镜像

bash 复制代码
sh build.sh

4.基于构建的镜像部署python服务

参考 : https://blog.csdn.net/Lxinccode/article/details/152129645

相关推荐
Captain_Data5 分钟前
Python机器学习sklearn线性模型完整指南:LinearRegression/Ridge/Lasso详细代码注释
python·机器学习·数据分析·线性回归·sklearn
爱码小白8 分钟前
MySQL 单表查询练习题汇总
数据库·python·算法
北辰alk20 分钟前
全网最详实!Python 全家桶框架深度对比:从 Web 开发到 AI 应用,一篇打通选型关
python
xyz_CDragon1 小时前
OpenClaw Skills 完全指南:ClawHub 安装、安全避坑与自定义开发(2026)
人工智能·python·ai·skill·openclaw·clawhub
断眉的派大星1 小时前
pytorch中view和reshape的区别
人工智能·pytorch·python
程序员阿明1 小时前
spring boot3 集成jjwt(java-jwt)版本的
java·spring boot·python
Fleshy数模1 小时前
基于MediaPipe实现人体姿态与脸部关键点检测
python·opencv·计算机视觉
coppher1 小时前
Ubuntu 22.04 amd64 离线安装 Docker 完整教程
linux·docker
星马梦缘1 小时前
jupyter Kernel Disconnected崩溃的修复
ide·python·jupyter
Freak嵌入式1 小时前
MicroPython LVGL基础知识和概念:显示与多屏管理
开发语言·python·github·php·gui·lvgl·micropython