目的是在 Docker 容器内运行 OpenCL/OpenGL(互操作)应用程序。但我还没有成功。
Intro
我有配备 NVidia 显卡的笔记本电脑,因此我认为利用 NVidia Dockerfiles [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
and clinfo
成功显示有关我的设备的信息。
Attempt
最后,我尝试创建一个包含 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 https://gitlab.com/nvidia/opencl/blob/ubuntu16.04/devel/Dockerfile
- [2] https://gitlab.com/nvidia/opencl/blob/ubuntu16.04/runtime/Dockerfile https://gitlab.com/nvidia/opencl/blob/ubuntu16.04/runtime/Dockerfile