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

相关推荐
jeffzhengye15 小时前
Claude-Real-Video:让 Claude 真正看懂视频,0 Token 成本
python·微信
IT知识分享15 小时前
WebP转JPG开发经验:从格式解码到本地批量转换的实践
javascript·python·图片转换
小柯南敲键盘16 小时前
Temu多语言商品图翻译实现方案
人工智能·python
威联通安全存储16 小时前
TS-h1677AXU-RP在工程机械机器人弧焊中的部署
大数据·人工智能·python·机器人
statistican_ABin16 小时前
WHO各国预期寿命影响因素分析与轻量回归预测
大数据·人工智能·python·数据分析·回归
卷无止境17 小时前
Python生成器与惰性求值:从yield说起的一场"暂停魔法"
后端·python
卷无止境17 小时前
从一个装饰器说起:拆解 Python 的 @property
后端·python
农村小镇哥17 小时前
python操作配置文件ini
开发语言·python
love530love1 天前
OpenClaw Windows Companion 桌面客户端 连接 LM Studio 完整配置指南
人工智能·windows·python·openclaw
IT瑞先生1 天前
docker-compose下快速部署实操——持续更新...
运维·docker·容器