2016-09-16 5 views
1

내 시스템에서 vtk, tvtk, ParaView, mayavi 등과 같은 다양한 패키지와 프로그램을 설치 한 후에는 완전히 손상된 전역 패키지로 끝납니다. 예를 들면 : 현재 메시지없이 충돌하는 것보다 몇 초 이상 mayavi를 실행할 수 없습니다. 문제는 모든 라이브러리마다 다른 버전의 dependec (특히 Qt4와 Qt5)이 필요하다는 것입니다. 특정 비표준 기능 (Python 지원이있는 ParaView)을 허용하기 위해 수동으로 소프트웨어를 빌드해야하는 경우가 있습니다. 결과는 완전히 뒤죽박죽이다.OpenGL 지원을 사용하는 Docker의 ParaView

따라서 Docker에 ParaView를 설치하여 소프트웨어를 격리하기로 결정했습니다. 필자는 우분투 저장소 패키지의 기본 선택이 아닌 ParaView의 Python 스크립팅 기능을 확실히 필요로합니다. Here은 제 일의 결과입니다. 필자는 this repository에 영감을 받았지만 특정 단점이 있습니다. 특히 Python 및 MPI 지원이 없으며 공식 ParaView repo 포크입니다.

그래서 저는 그것을 사용하여 새로운 저장소를 만듭니다. 필요한 모든 패키지가있는 우분투 이미지이며, ParaView는 MPI 및 Python을 지원합니다. 빌드 방법 및 실행 방법은 README을 참조하십시오. 관심있는 사람이 있다면 이미지를 dockerhub으로 보낼 수 있습니다. 호스트 컴퓨터의 사용자는 uid이어야합니다. 그렇지 않으면 X 서버 터널이 올바르게 작동하지 않습니다. 그러나 쉽게 수정할 수 있습니다.

그래서 문제는 다음과 같습니다.

libGL error: failed to open drm device: No such file or directory 
libGL error: failed to load driver: i965 

은 물론, 더 OpenGL 가속이 없다 : 내가받은 Paraview를 실행하면이 오류 메시지를 참조하십시오. docker에서 OpenGL 지원을 활성화하는 방법을 아는 사람이 있습니까? 내가 this 저장소 알고 있지만 vnc 통해 솔루션을 좋아하지 않아. 같은 방법으로 다른 방법이 있습니까? 나는 어떤 도움을 많이 주시면 OpenGL 잘 알고 아니에요.

답변

2

다음 단계를 시도 할 수 있습니다 :

  • 이 이미지에 메사-utils를 설치
  • 그룹 비디오에 컨테이너 사용자를 추가합니다.

OpenGL 렌더링 된 소프트웨어를 사용할 수 있어야합니다.

호스트에서 X 유닉스 소켓을 공유하면 몇 가지주의 사항이있을 수 있습니다. mviereck/x11docker을 사용하여 두 번째 X 서버에서 이미지를 실행할 수 있습니다. 소프트웨어 렌더링 된 OpenGL 잘 작동합니다. 하드웨어 렌더링은 실험적이며 개발 중입니다. 당신의 GitHub의에 환매 특약 예에

당신이 호스트 디스플레이를 사용하고 있습니다 : 0, $DISPLAY를 공유하고 유닉스 소켓 :

docker run -ti -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix paraview 

당신이 당신의 용기 (특히 /dev/dri/card0)와 dev/dri에있는 모든 파일을 공유하는 경우, 대부분의 아마 당신은 하드웨어를 얻을 가속. 렌더링 결함이 있으면 도커 실행 옵션 --ipc=host을 사용할 수 있습니다. X 설정에 따라 ~/.Xauthority$XAUTHORITY도 공유해야하며 컨테이너 사용자가 root 인 경우 호스트에 xhost +SI:localuser:root을 설정해야합니다.

주의 :이 설정은 컨테이너 격리를 분해합니다! (더 나은 격리를 위해 x11docker를 확인하십시오.)

1

@mviereck가 제안한 것 외에 nvidia-docker 컨테이너에서 docker run --privileged을 수행해야했습니다.내 전체 도커 실행 명령은 다음과 같습니다.

분명히 이상적인 솔루션은 아니지만 격리가 주요 관심사가 아닌 많은 로컬 사용 사례에 충분합니다.

CMD="${DOCKER} run --detach=true \                                                                                   
       --privileged \                                                                                    
       --group-add ${DOCKER_GROUP_ID} \                                                                                
       --env HOME=${HOME_DIR} \                                                                                  
       --env DISPLAY \                                                                                    
       --interactive \                                                                                    
       --name DevContainer \                                                                                   
       --net=host \                                                                                     
       --rm \                                                                                      
       --tty \                                                                                      
       --user=${USER_ID}:${GROUP_ID} \                                                                                
       --volume $HOME_DIR_HOST:${HOME_DIR} \                                                                               
       --volume $WORK_DIR:${WORK_DIR} \                                                                                
       --volume /tmp/.X11-unix:/tmp/.X11-unix \                                                                              
       --volume /var/run/docker.sock:/var/run/docker.sock \                                                                           
       ${IDEA_IMAGE}" 

이러한 옵션 중 다수는 OpenGL에 불필요하지만 확장 된 액세스가 필요한 특정 응용 프로그램에 유용합니다.

저는 nvidia docker container을 사용하고 있으므로 $DOCKER은 실제로는 nvidia-docker입니다. 또한 내 호스트 사용자를 video 그룹에 추가했습니다. 그러나 중요한지 확실하지 않습니다.

관련 문제