2016-09-16 8 views
1

私のシステムでvtk、tvtk、ParaView、mayavi、...などのさまざまなパッケージやプログラムをインストールした後は、完全に壊れたグローバルパッケージが作成されます。例えば:現在、私は何もメッセージなしでクラッシュするよりも、数秒以上の間、mayaviを実行することができません。問題は、すべてのライブラリが異なるバージョンの依存関係(特にQt4とQt5)を必要とすることです。ある標準以外の機能(PythonをサポートしたParaView)を可能にするために手動でソフトウェアを構築する必要があることです。結果は完全な混乱です。OpenGLをサポートしているDockerのParaView

したがって、ソフトウェアを分離するためにDockerでParaViewを構築することにしました。 ParaViewのPythonスクリプティング機能が必要ですが、これはUbuntuリポジトリパッケージのデフォルトの選択肢ではありません。 Here私の仕事の結果です。私はthis repositoryに触発されましたが、特にPythonやMPIのサポートはなく、公式のParaViewレポのフォークであるという欠点があります。

私はこれを使用して新しいリポジトリを作成しました。これは、すべての必要なパッケージを持つUbuntuイメージであり、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を実行すると、私はこのエラーメッセージを参照してください。ドッカーでOpenGLサポートを有効にする方法を知っている人はいますか?私はthisリポジトリを知っていますが、私はvnc経由の解決策が嫌いです。同じように他の方法がありますか?私はOpenGLに慣れていないので、どんな助けでも大歓迎です。

答えて

2

あなたはこれらの手順を試してください:

  • は、グループビデオにあなたのコンテナのユーザーを追加するには、画像
  • にメサ-utilsのをインストールしてください。

OpenGLをレンダリングしたソフトウェアを使用できるはずです。

ホストからX unixソケットを共有することにはいくつかの注意点があります。 mviereck/x11dockerを使用して、代わりに2番目のXサーバーでイメージを実行できます。ソフトウェアレンダリングOpenGLは正常に動作します。ハードウェアレンダリングは実験的で開発中です。 0、$DISPLAYを共有し、Unixソケット:あなたがホストディスプレイを使用しているあなたのGitHubのレポ例で

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

あなたのコンテナ(特に/dev/dri/card0)とdev/dri内のすべてのファイルを共有する場合は、おそらくあなたは、ハードウェアを取得するには加速度。レンダリングの不具合が発生した場合は、docker run option --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グループにホストユーザーを追加しましたが、それが重要かどうかはわかりません。

関連する問題