Docker部署LLM应用遇ctransformers库libctransformers.so加载错误求助
解决Docker容器中运行Python/Chainlit应用时ctransformers的.so文件找不到问题
问题场景
本地MacOS M1 Pro(ARM架构)环境下,Python3.11+Chainlit+ctransformers==0.2.27的应用运行正常,但通过Docker容器启动后报错:
OSError: /usr/local/lib/python3.11/site-packages/ctransformers/lib/basic/libctransformers.so: cannot open shared object file: No such file or directory
已确认容器内该文件实际存在。
原因分析
M1 Pro为ARM64架构,若Docker使用的基础镜像为AMD64(x86_64)版本,或者ctransformers安装的是预编译的AMD64库,会导致ARM架构的容器无法正确加载.so文件(文件存在但架构不兼容)。
解决步骤
1. 使用ARM架构兼容的基础镜像
修改Dockerfile的基础镜像为支持ARM64的Python镜像,示例:
FROM python:3.11-slim-bookworm WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY app.py . CMD ["chainlit", "run", "app.py", "-w"]
2. 构建镜像时指定ARM平台
若Docker默认未使用ARM架构构建,执行构建命令时显式指定平台:
docker build --platform linux/arm64 -t local:app .
3. 从源码编译安装ctransformers(备选方案)
若预编译库仍不兼容,可从源码安装以适配容器架构:
- 修改requirements.txt,将
ctransformers==0.2.27替换为:git+https://github.com/marella/ctransformers.git@v0.2.27 - 或在Dockerfile中直接编译安装:
RUN pip install --no-cache-dir git+https://github.com/marella/ctransformers.git@v0.2.27
4. 验证容器架构
启动容器后,可进入容器确认架构匹配:
docker exec -it <container-id> uname -m
正常输出应为aarch64(ARM64架构标识)。
内容的提问来源于stack exchange,提问作者sunny1110
相关产品推荐
相关产品推荐

