Docker运行Python应用报错:ImportError: libGL.so.1文件缺失
解决PyVista导入时
libGL.so.1缺失的问题 修复步骤
修改你的Dockerfile主镜像阶段,添加libgl1-mesa-glx的安装命令:
# Main stage FROM python:3.8-buster WORKDIR /app ARG PULUMI_ACCESS_TOKEN ENV PULUMI_ACCESS_TOKEN=${PULUMI_ACCESS_TOKEN} ARG AWS_REGION ENV AWS_REGION=${AWS_REGION} ENV AWS_DEFAULT_REGION=${AWS_REGION} # 新增:安装PyVista依赖的OpenGL库 RUN apt-get update && \ apt-get -y install --no-install-recommends libgl1-mesa-glx && \ rm -rf /var/lib/apt/lists/* COPY --from=builder /usr/local/aws-cli /usr/local/aws-cli COPY --from=builder /usr/local/bin/aws /usr/local/bin/aws COPY --from=builder /usr/local/bin/aws_completer /usr/local/bin/aws_completer COPY --from=builder /root/.pulumi/bin/* /usr/bin COPY --from=builder /root/.pulumi /root/.pulumi COPY --from=builder /root/.local /root/.local RUN pulumi plugin install resource aws v5.12.1 ENV PATH=/root/.local/bin:$PATH
问题原因
你使用了Docker多阶段构建,builder阶段虽然安装了libgl1-mesa-glx,但主镜像基于全新的python:3.8-buster,没有继承builder阶段的系统依赖,导致运行时PyVista找不到需要的libGL.so.1库。
额外优化
- 加入
--no-install-recommends参数可避免安装无关依赖,减小镜像体积 - 清理
/var/lib/apt/lists/*能进一步压缩镜像大小
问题背景
运行docker-compose build和up后,出现如下导入错误:
import pyvista as pv File "/root/.local/lib/python3.8/site-packages/pyvista/__init__.py", line 15, in <module> from pyvista.errors import InvalidCameraError, RenderWindowUnavailable File "/root/.local/lib/python3.8/site-packages/pyvista/errors.py", line 19, in <module> from pyvista.plotting.errors import InvalidCameraError, RenderWindowUnavailable File "/root/.local/lib/python3.8/site-packages/pyvista/plotting/__init__.py", line 7, in <module> from . import _vtk File "/root/.local/lib/python3.8/site-packages/pyvista/plotting/_vtk.py", line 125, in <module> from ._vtk_gl import * File "/root/.local/lib/python3.8/site-packages/pyvista/plotting/_vtk_gl.py", line 20, in <module> from vtkmodules.vtkRenderingOpenGL2 import ( ImportError: libGL.so.1: cannot open shared object file: No such file or directory
使用的Dockerfile.dev内容如下:
FROM python:3.8-buster as builder ENV PYTHONUNBUFFERED 1 ARG REQUIREMENTS_FILE WORKDIR /app RUN set -x && \ apt-get update && \ apt -f install && \ apt-get -qy --no-install-recommends install netcat build-essential gnupg software-properties-common curl && \ rm -rf /var/lib/apt/lists/* && \ wget -O /wait-for https://raw.githubusercontent.com/eficode/wait-for/master/wait-for && \ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ unzip awscliv2.zip && \ ./aws/install -i /usr/local/aws-cli -b /usr/local/bin && \ rm -rf aws && \ rm awscliv2.zip && \ chmod +x /wait-for RUN set -x && \ apt-get update && \ apt-get -y install libgl1-mesa-glx xvfb ENV LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH COPY ./requirements requirements/ RUN pip install --user --no-warn-script-location -r ./requirements/requirements.txt RUN pip install --user --no-warn-script-location -r ./requirements/dev.txt RUN pip install --user torch==2.0.0 torchvision==0.15.1 --index-url https://download.pytorch.org/whl/cpu && \ rm -rf /root/.local/nvidia-dali* && \ rm -rf /root/.local/nvidia-cu* RUN pip install --user s3fs RUN pip install --user sendgrid RUN pip install --user pyvista==0.40.0 matplotlib # Main stage FROM python:3.8-buster WORKDIR /app ARG PULUMI_ACCESS_TOKEN ENV PULUMI_ACCESS_TOKEN=${PULUMI_ACCESS_TOKEN} ARG AWS_REGION ENV AWS_REGION=${AWS_REGION} ENV AWS_DEFAULT_REGION=${AWS_REGION} COPY --from=builder /usr/local/aws-cli /usr/local/aws-cli COPY --from=builder /usr/local/bin/aws /usr/local/bin/aws COPY --from=builder /usr/local/bin/aws_completer /usr/local/bin/aws_completer COPY --from=builder /root/.pulumi/bin/* /usr/bin COPY --from=builder /root/.pulumi /root/.pulumi COPY --from=builder /root/.local /root/.local # Reinstall pulumi plugin for AWS RUN pulumi plugin install resource aws v5.12.1 # Make sure scripts in .local are usable ENV PATH=/root/.local/bin:$PATH
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

