目的是在Docker容器中运行OpenCL / OpenGL(interop)应用程序。但是我还没有成功。
介绍
我有一台带有NVidia图形卡的笔记本电脑,所以我认为利用NVidia Dockerfile [1,2]是一个很好的起点。
以下Dockerfile:

# Dockerfile to run OpenGL app
FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04
ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES},display
RUN apt-get update && apt-get install -y --no-install-recommends \
        mesa-utils && \
    rm -rf /var/lib/apt/lists/*
效果很好,我能够运行glxgears
在自己的容器上运行OpenCL也没什么大不了的:
# Dockerfile to run OpenCL app
FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04
RUN apt-get update && apt-get install -y --no-install-recommends \
        ocl-icd-libopencl1 \
        clinfo && \
    rm -rf /var/lib/apt/lists/*
RUN mkdir -p /etc/OpenCL/vendors && \
    echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
并且clinfo成功显示有关我的设备的信息。

尝试
最后,这是我尝试使用OpenGL和OpenCL驱动程序创建容器的尝试:
# Dockerfile mixing OpenGL and OpenCL
FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04
ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES},display
RUN apt-get update && apt-get install -y --no-install-recommends \
        mesa-utils \
        ocl-icd-libopencl1 \
        clinfo && \
    rm -rf /var/lib/apt/lists/*
RUN mkdir -p /etc/OpenCL/vendors && \
    echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
现在,尽管clinfo仍会打印OpenCL设备信息,但glxgears却由于以下错误而失败:
Error: couldn't get an RGB, Double-buffered visual
任何想法如何使这项工作?提前致谢。

参考文献
  • [1] https://gitlab.com/nvidia/opencl/blob/ubuntu16.04/devel/Dockerfile
  • [2] https://gitlab.com/nvidia/opencl/blob/ubuntu16.04/runtime/Dockerfile
  • 最佳答案

    ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
    

    您忘记了display功能。

    关于docker - 如何在Docker容器中运行OpenCL + OpenGL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54243119/

    10-15 22:36