Ray Y
Ray Y

Reputation: 1321

Vglrun does not work in a Docker container

Note: This is on a headless AWS box on VNC, the current desktop I'm running on is DISPLAY=:1.0

I am trying to build a container that can hold an opengl application but I'm having trouble getting vglrun to work correctly. I am currently running it with --gpus all on the docker run line as well

# xhost +si:localuser:root
# docker run --rm -it \ 
  -e DISPLAY=unix$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  --gpus all centos:7 \ 
  sh -c "yum install epel-release -y && \
  yum install -y VirtualGL glx-utils && \
  vglrun glxgears"

No protocol specified
[VGL] ERROR: Could not open display :0

On the host:

$ nvidia-smi
Tue Jan 28 22:32:24 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.44       Driver Version: 440.44       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M60           Off  | 00000000:00:1E.0 Off |                    0 |
| N/A   30C    P8    16W / 150W |     56MiB /  7618MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      2387      G   /usr/bin/X                                    55MiB |
+-----------------------------------------------------------------------------+

I can confirm running glxgears without vglrun works fine but my application I'm trying to build into docker inherently uses vglrun. I have also tried using the nvidia container nvidia/opengl:1.1-glvnd-runtime-centos7 with no success.

running it with vglrun -d :1.0 glxgears or vglrun -d unix:1.0 glxgears gives me this error:

Error: couldn't get an RGB, Double-buffered visual

What am I doing wrong here? does vglrun not work in a container?

EDIT: It seems I was approaching this problem the wrong way, it seems to work when I'm on the primary :0 display but when using VNC to view display :1, the Mesa drivers get used instead of the Nvidia ones. Is there a way I can use the GPU on spawned VNC displays?

Upvotes: 2

Views: 2127

Answers (1)

Bloodlee
Bloodlee

Reputation: 126

I met the same problem and I solved by setting the variable "VGL_DISPLAY".

docker run ... -e VGL_DISPLAY=$DISPLAY ...

Then it worked! Please try.

Upvotes: 4

Related Questions