Skip to content

[Bug]: Cannot use Vulkan Inside Docker Container #1952

Description

@PedroMagar

Describe the bug
Vulkan fails to initialize inside a container using a Tesla V100 GPU. When executing vulkaninfo --summary inside a container (e.g., Ubuntu 24.04), the Vulkan loader throws a Code 0 error while trying to process the ICD libGLX_nvidia.so.0 via vk_icdGetInstanceProcAddr, resulting in "Found no drivers!" and ERROR_INCOMPATIBLE_DRIVER. This appears to be caused by libGLX attempting to initialize windowing/X11 components in a headless server environment where no display server is present.

To Reproduce

  1. Run a container (e.g., Ubuntu 24.04 base image) with NVIDIA Container Toolkit and NVIDIA_DRIVER_CAPABILITIES=all.
  2. Execute vulkaninfo --summary inside the running container.
  3. Observe the loader error: loader_scanned_icd_add: Could not get 'vkCreateInstance' via 'vk_icdGetInstanceProcAddr' for ICD libGLX_nvidia.so.0.

Expected behavior
vulkaninfo should successfully initialize a Vulkan instance and list the Tesla V100 device properties in a headless environment without failing on libGLX_nvidia.so.0.

Environment (please provide the following information):

  • nvidia-container-toolkit version: 1.19.1
  • NVIDIA Driver Version: 580.126.09
  • Host OS: Debian 12
  • Kernel Version: 6.1.0-50-amd64
  • Container Runtime Version: Docker v29.6.2
  • CPU Architecture: x86_64
  • GPU Model(s): Tesla V100

If applicable, also provide:

  • Kubernetes Distro and Version: N/A (Docker Standalone)
  • NVIDIA GPU Operator version: N/A
  • CUDA Version: N/A

Information to attach

  • Docker Version: 29.6.2
  • Container vulkaninfo --summary output:
ERROR: [Loader Message] Code 0 : loader_scanned_icd_add: Could not get 'vkCreateInstance' via 'vk_icdGetInstanceProcAddr' for ICD libGLX_nvidia.so.0
'DISPLAY' environment variable not set... skipping surface info
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
ERROR: [Loader Message] Code 0 : vkCreateInstance: Found no drivers!
Cannot create Vulkan instance.
This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan.
ERROR at ./vulkaninfo/./vulkaninfo.h:458:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER
  • The nvidia_icd.json manifest was present in both /usr/share/vulkan/icd.d/ and /etc/vulkan/icd.d/. This caused the Vulkan loader to scan both locations, resulting in a duplicated device view when executing vulkaninfo --summary.
  • Host vulkaninfo --summary output:
==========
VULKANINFO
==========

Vulkan Instance Version: 1.3.239


Instance Extensions: count = 22
-------------------------------
VK_EXT_acquire_drm_display             : extension revision 1
VK_EXT_acquire_xlib_display            : extension revision 1
VK_EXT_debug_report                    : extension revision 10
VK_EXT_debug_utils                     : extension revision 2
VK_EXT_direct_mode_display             : extension revision 1
VK_EXT_display_surface_counter         : extension revision 1
VK_EXT_surface_maintenance1            : extension revision 1
VK_EXT_swapchain_colorspace            : extension revision 5
VK_KHR_device_group_creation           : extension revision 1
VK_KHR_display                         : extension revision 23
VK_KHR_external_fence_capabilities     : extension revision 1
VK_KHR_external_memory_capabilities    : extension revision 1
VK_KHR_external_semaphore_capabilities : extension revision 1
VK_KHR_get_display_properties2         : extension revision 1
VK_KHR_get_physical_device_properties2 : extension revision 2
VK_KHR_get_surface_capabilities2       : extension revision 1
VK_KHR_portability_enumeration         : extension revision 1
VK_KHR_surface                         : extension revision 25
VK_KHR_surface_protected_capabilities  : extension revision 1
VK_KHR_wayland_surface                 : extension revision 6
VK_KHR_xcb_surface                     : extension revision 6
VK_KHR_xlib_surface                    : extension revision 6

Instance Layers: count = 5
--------------------------
VK_LAYER_INTEL_nullhw       INTEL NULL HW                1.1.73   version 1
VK_LAYER_MESA_device_select Linux device selection layer 1.3.211  version 1
VK_LAYER_MESA_overlay       Mesa Overlay layer           1.3.211  version 1
VK_LAYER_NV_optimus         NVIDIA Optimus layer         1.4.312  version 1
VK_LAYER_NV_present         NVIDIA GR2608 layer          1.4.312  version 1

Devices:
========
GPU0:
        apiVersion         = 1.4.312
        driverVersion      = 580.126.9.576
        vendorID           = 0x10de
        deviceID           = 0x1db1
        deviceType         = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
        deviceName         = Tesla V100-SXM2-16GB
        driverID           = DRIVER_ID_NVIDIA_PROPRIETARY
        driverName         = NVIDIA
        driverInfo         = 580.126.09
        conformanceVersion = 1.4.1.3
        deviceUUID         = 095ef9f0-ec89-ef9e-98b3-bdedb50496f9
        driverUUID         = 9756eed7-117e-56eb-8928-8e249b39bb59
GPU1:
        apiVersion         = 1.4.312
        driverVersion      = 580.126.9.576
        vendorID           = 0x10de
        deviceID           = 0x1db1
        deviceType         = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
        deviceName         = Tesla V100-SXM2-16GB
        driverID           = DRIVER_ID_NVIDIA_PROPRIETARY
        driverName         = NVIDIA
        driverInfo         = 580.126.09
        conformanceVersion = 1.4.1.3
        deviceUUID         = 095ef9f0-ec89-ef9e-98b3-bdedb50496f9
        driverUUID         = 9756eed7-117e-56eb-8928-8e249b39bb59
GPU2:
        apiVersion         = 1.3.230
        driverVersion      = 0.0.1
        vendorID           = 0x10005
        deviceID           = 0x0000
        deviceType         = PHYSICAL_DEVICE_TYPE_CPU
        deviceName         = llvmpipe (LLVM 15.0.6, 256 bits)
        driverID           = DRIVER_ID_MESA_LLVMPIPE
        driverName         = llvmpipe
        driverInfo         = Mesa 22.3.6 (LLVM 15.0.6)
        conformanceVersion = 1.3.1.1
        deviceUUID         = 6d657361-3232-2e33-2e36-000000000000
        driverUUID         = 6c6c766d-7069-7065-5555-494400000000

Metadata

Metadata

Assignees

Labels

bugIssue/PR to expose/discuss/fix a bugneeds-triageissue or PR has not been assigned a priority-px label

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions