Зачем тратить время на поиски решения самостоятельно, когда можно просто «украсть» чужое решение?Особенно, если это кто-то другой - NVIDIA.
Так как nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04
, кажется, работает хорошо, но использование его как основы нарушает требование 1, я могу просто скопировать файлы из него и вместо этого в свое изображение.
Здесь ${from}
указывает на мое исходное изображение контейнера, не поддерживающего nvidia (но я также протестировал его с from=ubuntu:16.04
), и я просто копирую драйверы и конфигурацию nvidia:
ARG from
FROM nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04 as nvidia
FROM ${from}
COPY --from=nvidia /usr/local /usr/local
COPY --from=nvidia /etc/ld.so.conf.d/glvnd.conf /etc/ld.so.conf.d/glvnd.conf
ENV NVIDIA_VISIBLE_DEVICES=all NVIDIA_DRIVER_CAPABILITIES=all
* 1010С учетом этого и моего
${from}
, построенного поверх
ubuntu:16.04
, glxinfo возвращает ожидаемую конфигурацию (NVIDIA является поставщиком GL), и я могу запускать Gazebo, Blender и т. Д., Как на хосте.Прелесть этого в том, что результирующий контейнер работает, даже когда не используется среда выполнения nvidia, в системе без драйверов nvidia, он просто грациозно возвращается к использованию Mesa (я думаю, это то, что делает «glvnd»).
Хотя в настоящее время мне требуется использовать Ubuntu 16.04, я не вижу причин, по которым подобный подход не будет работать для других версий Ubuntu.