2017-07-17 7 views
1

私は現在、Ubuntu 16.04.2を実行しています。プログラミングを開始するだけの十分な新規インストールです。私は、AMDのドライバで多くの問題を抱えているr9 390 AMDカードを持っていますが、それは問題ではないと思います。GPU(OpenGL、OpenCL、mesaなどのバージョン)のデータ/情報をホストからdockerimagrに渡すにはどうすればよいですか?

私は次のスニペットでdockerfileを作成しました:それを構築した後

FROM ubuntu:16.04 
..... 
ENV DEBIAN_FRONTEND noninteractive 
RUN apt-get update && apt-get install -y --no-install-recommends apt-utils 
WORKDIR /buildls 
CMD ["bash"] 
RUN apt-get install -y x11-apps 
RUN apt-get install -y libcanberra-gtk* 
RUN apt-get -y install libglfw3-dev 
RUN apt-get -y install libglew-dev 
RUN apt-get -y install mesa-utils 
....... 

、私はそれを実行します。

docker run -it      `#container process` \ 
-v /tmp/.X11-unix:/tmp/.X11-unix `#Allows the X11 server to be shared (GUI)` \ 
-v $(pwd)/volume:/app   `#Shares a folder, one down in current directory (~/volume) with ROOT/app in the container` \ 
-e DISPLAY=$DISPLAY    `#Shares the display between the 2 systems` \ 
opengl_why_you_no_work \ 

私はシンプルなGLローダプログラムを作成し、GLFWとGLEWで、私はOpenGL 2.1をサポートするための2つのバージョンを作成しました。私が書いたサンプルプログラム(いくつかのデバッグ出力呼び出しを含む)と

glxinfo|grep OpenGL 

私は興味深い質問があります。私のホスト上でglxinfoコールを使用して 、私はドッキングウィンドウ画像に

OpenGL vendor string: X.Org 
OpenGL renderer string: Gallium 0.4 on AMD HAWAII (DRM 2.46.0/4.8.0-58-generic, LLVM 3.8.0) 
OpenGL core profile version string: 4.1 (Core Profile) Mesa 12.0.6 
OpenGL core profile shading language version string: 4.10 
OpenGL version string: 3.0 Mesa 12.0.6 
OpenGL shading language version string: 1.30 
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 12.0.6 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00 

を得る:

OpenGL vendor string: VMware, Inc. 
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.8, 256 bits) 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 12.0.6 
OpenGL core profile shading language version string: 3.30 
OpenGL version string: 3.0 Mesa 12.0.6 
OpenGL shading language version string: 1.30 
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 12.0.6 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00 

なるほど、ベンダー?したがって、OpenGL 2.1用に書かれたプログラムは、以下を使用しています。

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); 
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); 

ホストとドッカーの両方で実行されます。単純なレンダリング...しかしそれは動作します。

libGL error: failed to open drm device: Permission denied 
libGL error: failed to load driver: radeonsi 

私はドッキングウィンドウの画像上のOpenGL 3.2のために作られたバージョンを実行しようとすると、私は何のレンダリング、窓なし、同じ2つのエラーが出るん:それはドッキングウィンドウの画像の上にレンダリングするにもかかわらず、私はまだ、このエラーが出ます上記の、この出力:

Renderer: (null) 
OpenGL version supported (null) 

代わりのドッカー画像上の2.1バージョン:

Renderer: Gallium 0.4 on llvmpipe (LLVM 3.8, 256 bits) 
OpenGL version supported 3.0 Mesa 12.0.6 

またはホストのいずれかのバージョンを実行して結果:

Renderer: Gallium 0.4 on AMD HAWAII (DRM 2.46.0/4.8.0-58-generic, LLVM 3.8.0) 
OpenGL version supported 4.1 (Core Profile) Mesa 12.0.6 

これは、X.orgとVMware、Inc.のベンダーと関係があると仮定しています。これを上書き、パススルー、置き換え、または回避することはできますか?私はおそらくOpenGL 3.0用のコードを書くことができました(どこで楽しいのですか?)しかし、プログラムでもっと複雑になるとlibGLエラーが心配しています。さらに、私はOpenCLを試してみたいと思います。私は同様の問題があると確信しています。

答えて

1

私は答えを見つけましたが、それはいくつかの殺すかもしれません...しかし、それは動作します!

私はDockerfileに追加:

RUN apt-get install -y xserver-xorg-video-all 
RUN apt-get update && apt-get install -y \ 
    libgl1-mesa-glx \ 
    libgl1-mesa-dri \ 
    && rm -rf /var/lib/apt/lists/* 
.... 
RUN usermod -a -G video <username> 

しかし、私はメサファイルが

FROM ubuntu:16.04 

ラインの結果としてそこに存在していたと思います。私はまた:

--device=/dev/dri:/dev/dri 

を追加して、ドッカー画像を実行しました。興味深いことに、私がトラブルシューティングをしている間に、MESAを最新バージョン(ここでは17.1 - >http://www.omgubuntu.co.uk/2017/05/mesa-17-1-ubuntu-ppa)にアップグレードしました。私のホストにはGL 4.5、イメージにはMESA 12.0.6の4.1があります。 Windows/OSホストから実行可能にする方法を試してみる必要があります。私は、次の参照を使用

PGロボットオペレーティングシステム(ROS)の303:完全なリファレンス、第2巻(それのプレビューをグーグル)

bbs.archlinux.org/viewtopic.php? ID = 175164

github.com/hilbert/hilbert-docker-images/issues/9

stackoverflow.com/questions/25185405/using-gpu-from-a-docker-container

askubuntu.com/questions/809081/how-to-run-opencl-program-in-docker-container-with-amdgpu-pro

関連する問題