docker - 如何在 Docker 容器中运行 OpenCL + OpenGL?

标签 docker opengl interop opencl nvidia-docker

目标是在 docker 容器内运行 OpenCL/OpenGL(互操作)应用程序。但是我还没有成功。

介绍

我有一台带 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

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 

知道如何使这项工作成功吗?提前致谢。


引用资料

最佳答案

ENV NVIDIA_DRIVER_CAPABILITIES compute,utility

您忘记了 display 的功能。

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

相关文章:

spring - 由于 java.net.ConnectException : Connection refused,无法找到 PropertySource

docker - 无法读取Docker容器日志:权限被拒绝

opengl - 处理反向运动学 : animation blending or math?

c++ - 使用 wprintf 打印 opengl 着色器编译日志

go - Go中调用kernel32的ReadProcessMemory

c# - 调用从 C# 获取字符指针的 C++ 函数

macos - Docker 容器 - 如何配置以便在 vagrant 中运行时获得可行的 IP 地址?

amazon-web-services - AWS上的Docker群-群服务无法访问互联网

c# - 使用 DLLImport 将数据发送到非托管代码

opengl - Golang fmt.Println() 导致游戏崩溃