You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:40:39