在 Docker 容器中部署时,如果遇到 onnxruntime DLL 加载失败的错误:
ImportError: DLL load failed while importing onnxruntime_pybind11_state: 动态链接库(DLL)初始化例程失败
docker/adhServer.Dockerfile 已经更新,添加了以下系统依赖:
libgomp1 - OpenMP 支持(onnxruntime 需要)libgcc-s1 - GCC 运行时库libstdc++6 - C++ 标准库libc6 - C 标准库# 在项目根目录执行
docker-compose build --no-cache adhServer
# 或者如果使用单独的 Dockerfile
docker build -f docker/adhServer.Dockerfile -t adh-server:latest .
启动容器后,可以通过以下方式验证 onnxruntime 是否正常工作:
# 进入容器
docker exec -it <container_name> python3 -c "import onnxruntime as ort; print(ort.get_available_providers())"
如果成功,应该看到类似输出:
['CPUExecutionProvider']
如果标准版本仍然有问题,可以尝试安装 CPU 专用版本:
在 requirements.txt 中:
onnxruntime==1.16.3
或者明确指定 CPU 版本:
pip install onnxruntime==1.16.3
确保使用 Python 3.10(onnxruntime 1.16.3 支持 Python 3.8-3.11)。
代码已经实现了延迟导入机制,即使 onnxruntime 加载失败,服务器也能正常启动,只是人脸检测功能会返回无脸结果。
如果问题仍然存在,可以:
检查容器日志:
docker logs <container_name>
bash
docker exec -it <container_name> ldd /usr/local/lib/python3.10/site-packages/onnxruntime/capi/libonnxruntime_providers_shared.so
检查 Python 环境:
docker exec -it <container_name> python3 -c "import sys; print(sys.version)"
libgomp1,CentOS 使用 libgomp)