Docker部署Streamlit+LightGBM遇libgomp.so.1缺失错误求助
Docker部署Streamlit+LightGBM时libgomp.so.1缺失问题解决
问题描述
运行容器时出现以下错误:
OSError: libgomp.so.1: cannot open shared object file: No such file or directory Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 565, in _run_script exec(code, module.__dict__) File "/src/stream.py", line 6, in <module> model = pickle.load(open('model.pkl', 'rb')) File "/usr/local/lib/python3.10/site-packages/lightgbm/__init__.py", line 8, in <module> from .basic import Booster, Dataset, Sequence, register_logger File "/usr/local/lib/python3.10/site-packages/lightgbm/basic.py", line 110, in <module> _LIB = _load_lib() File "/usr/local/lib/python3.10/site-packages/lightgbm/basic.py", line 101, in _load_lib lib = ctypes.cdll.LoadLibrary(lib_path[0]) File "/usr/local/lib/python3.10/ctypes/__init__.py", line 452, in LoadLibrary return self._dlltype(name) File "/usr/local/lib/python3.10/ctypes/__init__.py", line 374, in __init__ self._handle = _dlopen(self._name, mode)
已尝试在Dockerfile中添加libgomp1依赖,但问题未解决。当前使用的Dockerfile和requirements.txt如下:
当前Dockerfile
FROM ubuntu:latest WORKDIR /src/ RUN apt-get update && apt-get install -y --no-install-recommends apt-utils RUN apt-get update && \ apt-get install -y --no-install-recommends \ ca-certificates \ cmake \ build-essential \ gcc \ g++ \ git && \ rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get -y install curl RUN apt-get install libgomp1 -y # apt-get install curl FROM python:3.10.0-slim-buster WORKDIR /src COPY requirements.txt /src/ COPY --from=0 /src ./ RUN pip3 install -r requirements.txt EXPOSE 8501 COPY . /src/ ENTRYPOINT ["streamlit", "run"] CMD [ "stream.py" ]
requirements.txt
pandas sklearn streamlit lightgbm
问题根源
多阶段构建中,第一阶段基于Ubuntu安装的libgomp1并没有被正确传递到第二阶段的Python slim镜像(基于Debian Buster)。两个发行版的系统库路径结构不同,仅复制/src目录无法将系统级的库文件转移到第二阶段,导致LightGBM启动时找不到libgomp.so.1。
解决方案
直接在Python slim镜像阶段安装libgomp1,无需多余的Ubuntu构建阶段。修正后的Dockerfile如下:
FROM python:3.10.0-slim-buster WORKDIR /src # 安装LightGBM所需的OpenMP库及基础依赖 RUN apt-get update && \ apt-get install -y --no-install-recommends \ libgomp1 \ ca-certificates && \ rm -rf /var/lib/apt/lists/* COPY requirements.txt /src/ # 使用--no-cache-dir减少镜像体积 RUN pip3 install --no-cache-dir -r requirements.txt EXPOSE 8501 COPY . /src/ ENTRYPOINT ["streamlit", "run"] CMD [ "stream.py" ]
说明
- 移除多余的Ubuntu构建阶段,直接基于Python slim镜像构建,简化流程并减少镜像体积。
- 在Debian基础的Python镜像中直接安装
libgomp1,该包在Debian Buster的官方源中可用,安装后LightGBM可直接找到所需库文件。 - 保留
ca-certificates确保pip能正常下载PyPI包,清理apt缓存进一步减小镜像体积。 - 给pip添加
--no-cache-dir参数,避免缓存安装包占用空间。
内容的提问来源于stack exchange,提问作者krishfish66
相关产品推荐
相关产品推荐

