프로그래밍

[Docker] libGL error: MESA-LOADER: failed to retrieve device information 오류 해결

Apro1004 2025. 2. 21. 15:52
반응형

프로그램을 개발하다보면, docker를 이용하여 환경 설정을 하는 경우가 많은데, 이 때, GUI를 활용하기 위하여 docker의 설정을 이용합니다.

 

하지만, 경우에 따라 display device를 제대로 인식하지 못하는 경우에 오류가 발생할 수 있는데, 특히 외장그래픽카드와 내장그래픽카드를 같이 사용하는 경우에 발생할 수 있습니다. 이를 해결하기 위한 방법을 찾다가, 다음과 같이 해결하여 글을 정리합니다.

 

1. 호스트의 OpenGL 라이브러리를 컨테이너에 마운트하기

Docker 컨테이너 실행 시, 호스트 시스템의 OpenGL 라이브러리를 컨테이너 내부에서 사용할 수 있도록 설정해야 합니다.

(1) NVIDIA GPU 사용 시 (NVIDIA-Docker)

만약 NVIDIA GPU를 사용하고 있다면, nvidia-docker 또는 --gpus all 옵션을 활용하세요.

docker run --gpus all -e NVIDIA_DRIVER_CAPABILITIES=all -e NVIDIA_VISIBLE_DEVICES=all \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=$DISPLAY \ -it <image_name>
  • --gpus all: GPU를 컨테이너에서 사용할 수 있도록 허용
  • -e DISPLAY=$DISPLAY: GUI 애플리케이션이 호스트의 X 서버를 사용할 수 있도록 설정
  • -v /tmp/.X11-unix:/tmp/.X11-unix: X11 소켓을 공유하여 그래픽 인터페이스가 가능하도록 설정
  • -e NVIDIA_DRIVER_CAPABILITIES=all: 컨테이너 내에서 모든 GPU 기능을 활성화

(2) Intel 또는 AMD GPU 사용 시

Intel 또는 AMD GPU를 사용하는 경우, 호스트의 OpenGL 라이브러리를 컨테이너에 마운트해야 합니다.

docker run --device /dev/dri --device /dev/kfd -v /tmp/.X11-unix:/tmp/.X11-unix \ -e DISPLAY=$DISPLAY -it <image_name>
  • --device /dev/dri: GPU 드라이버 접근 권한 부여
  • --device /dev/kfd: AMD GPU의 경우 필요
  • -v /tmp/.X11-unix:/tmp/.X11-unix: GUI 애플리케이션 실행 가능하도록 설정

2. 필요한 패키지 설치

컨테이너 내부에서 필요한 OpenGL 및 Mesa 라이브러리를 설치해야 합니다.

apt update && apt install -y libgl1-mesa-glx libgl1-mesa-dri

또한, NVIDIA GPU의 경우 libglvnd도 필요할 수 있습니다.

apt install -y libglvnd0 libgl1 libglx0 libegl1 libgles2

3. 환경 변수 설정

컨테이너 내부에서 OpenGL이 올바른 드라이버를 찾을 수 있도록 환경 변수를 설정해야 합니다.

export LIBGL_ALWAYS_INDIRECT=1
export LIBGL_DEBUG=verbose
export MESA_LOADER_DRIVER_OVERRIDE=i965 # Intel GPU의 경우
export MESA_LOADER_DRIVER_OVERRIDE=radeonsi # AMD GPU의 경우

이를 ~/.bashrc 또는 ~/.profile에 추가하면 지속적으로 적용할 수 있습니다.


4. X 권한 부여

GUI를 사용하는 애플리케이션의 경우 X 권한을 부여해야 합니다.

xhost +local:docker

컨테이너 내부에서 echo $DISPLAY를 실행하여 환경 변수가 올바르게 설정되었는지 확인하세요.


5. NVIDIA 컨테이너 환경 체크

만약 NVIDIA GPU를 사용한다면, 컨테이너 내부에서 아래 명령어를 실행하여 GPU가 정상적으로 감지되는지 확인하세요.

nvidia-smi glxinfo | grep "OpenGL renderer"

추가 문제 해결

1. libGL error: failed to load driver: swrast 오류가 발생하는 경우:

apt install -y libgl1-mesa-dri

 

2. libEGL error: failed to initialize EGL display 오류가 발생하는 경우:

apt install -y libegl1-mesa

이 방법들을 적용하면 대부분의 경우 libGL error: MESA-LOADER: failed to retrieve device information 문제를 해결할 수 있습니다.

728x90
반응형

'프로그래밍' 카테고리의 다른 글

Python 패키지목록(=requirement.txt) 만들기  (0) 2022.10.20