Isaac SIM In docker

I want to run isaac sim inside a docker, but I can’t use the official docker, as I need it to run alognside other software that runs on ubuntu 20.04.

The problem I am facing is that while I can run the official docker fine with:

docker run --name isaac-sim --entrypoint bash -it --runtime=nvidia --gpus all -e "ACCEPT_EULA=Y" --rm --network=host \
    -e "PRIVACY_CONSENT=Y" \
    -v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw \
    -v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw \
    -v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw \
    -v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw \
    -v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw \
    -v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw \
    -v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw \
    -v ~/docker/isaac-sim/documents:/root/Documents:rw \
    nvcr.io/nvidia/isaac-sim:4.5.0

But If I replace the image with ubuntu:20.04

sudo docker run -it  --entrypoint bash -it --runtime=nvidia --gpus all -e "ACCEPT_EULA=Y" --rm --network=host     -e "PRIVACY_CONSENT=Y"     -v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw     -v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw     -v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw     -v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw     -v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw     -v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw     -v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw     -v ~/docker/isaac-sim/documents:/root/Documents:rw  ubuntu:20.04

Then install dependencies, isaac sim and run it:

apt update && apt install  libgl-dev:amd64 libglu1-mesa libxt6 libgomp1 libxrandr2
# install isaac sim

Then I run in the same way as the runheadless.sh

/isaac-sim/license.sh && /isaac-sim/privacy.sh && /isaac-sim/isaac-sim.streaming.sh \
  --/persistent/isaac/asset_root/default="$OMNI_SERVER" \
  --merge-config="/isaac-sim/config/open_endpoint.toml" --allow-root "$@"

I get these errors:

[0.107s] [ext: omni.kit.async_engine-0.0.1] startup
[0.605s] [ext: omni.metrics.core-0.0.1] startup
[0.605s] [ext: omni.client.lib-1.0.0] startup
[0.613s] [ext: omni.blobkey-1.1.2] startup
[0.613s] [ext: omni.stats-1.0.1] startup
[0.614s] [ext: omni.datastore-0.0.0] startup
[0.618s] [ext: omni.client-1.2.2] startup
[0.622s] [ext: omni.ujitso.default-1.0.0] startup
[0.624s] [ext: omni.hsscclient-1.1.1] startup
2025-03-25 13:31:40 [605ms] [Warning] [omni.datastore] OmniHub is inaccessible
[0.626s] [ext: omni.gpu_foundation.shadercache.vulkan-1.0.0] startup
[0.629s] [ext: omni.assets.plugins-0.0.0] startup
[0.630s] [ext: omni.gpu_foundation-0.0.0] startup
[0.636s] [ext: carb.windowing.plugins-1.0.0] startup
2025-03-25 13:31:40 [618ms] [Warning] [carb.windowing-glfw.plugin] GLFW initialization failed.
2025-03-25 13:31:40 [618ms] [Warning] [carb] Failed to startup plugin carb.windowing-glfw.plugin (interfaces: [carb::windowing::IGLContext v1.0],[carb::windowing::IWindowing v1.5]) (impl: carb.windowing-glfw.plugin)
[0.637s] [ext: omni.kit.renderer.init-0.0.0] startup
2025-03-25 13:31:40 [631ms] [Warning] [omni.platforminfo.plugin] failed to open the default display.  Can't verify X Server version.

|---------------------------------------------------------------------------------------------|
| Driver Version: 0             | Graphics API: Vulkan
|=============================================================================================|
| GPU | Name                             | Active | LDA | GPU Memory | Vendor-ID | LUID       |
|     |                                  |        |     |            | Device-ID | UUID       |
|     |                                  |        |     |            | Bus-ID    |            |
|=============================================================================================|
| OS: 20.04.6 LTS (Focal Fossa) ubuntu, Version: 20.04.6, Kernel: 6.11.0-17-generic
| Processor: AMD Ryzen 9 7950X 16-Core Processor
| Cores: 16 | Logical Cores: 32
|---------------------------------------------------------------------------------------------|
| Total Memory (MB): 31210 | Free Memory: 27439
| Total Page/Swap (MB): 4095 | Free Page/Swap: 0
|---------------------------------------------------------------------------------------------|
2025-03-25 13:31:41 [1,025ms] [Error] [gpu.foundation.plugin] No device could be created. Some known system issues:
- The driver is not installed properly and requires a clean re-install.
- Your GPUs do not support RayTracing: DXR or Vulkan ray_tracing, or hardware is excluded due to performance.
- The driver cannot enumerate any GPU: driver, display, TCC mode or a docker issue. For Vulkan, test it with Vulkaninfo tool from Vulkan SDK, instead of nvidia-smi.
- For Ubuntu, it requires server-xorg-core 1.20.7+ and a display to work without --no-window.
- For Linux dockers, the setup is not complete. Install the latest driver, xServer and NVIDIA container runtime.


|---------------------------------------------------------------------------------------------|
| Driver Version: 0             | Graphics API: Vulkan
|=============================================================================================|
| GPU | Name                             | Active | LDA | GPU Memory | Vendor-ID | LUID       |
|     |                                  |        |     |            | Device-ID | UUID       |
|     |                                  |        |     |            | Bus-ID    |            |
|=============================================================================================|
| OS: 20.04.6 LTS (Focal Fossa) ubuntu, Version: 20.04.6, Kernel: 6.11.0-17-generic
| Processor: AMD Ryzen 9 7950X 16-Core Processor
| Cores: 16 | Logical Cores: 32
|---------------------------------------------------------------------------------------------|
| Total Memory (MB): 31210 | Free Memory: 27360
| Total Page/Swap (MB): 4095 | Free Page/Swap: 0
|---------------------------------------------------------------------------------------------|
2025-03-25 13:31:41 [1,472ms] [Error] [gpu.foundation.plugin] No device could be created. Some known system issues:
- The driver is not installed properly and requires a clean re-install.
- Your GPUs do not support RayTracing: DXR or Vulkan ray_tracing, or hardware is excluded due to performance.
- The driver cannot enumerate any GPU: driver, display, TCC mode or a docker issue. For Vulkan, test it with Vulkaninfo tool from Vulkan SDK, instead of nvidia-smi.
- For Ubuntu, it requires server-xorg-core 1.20.7+ and a display to work without --no-window.
- For Linux dockers, the setup is not complete. Install the latest driver, xServer and NVIDIA container runtime.

2025-03-25 13:31:41 [1,473ms] [Error] [omni.gpu_foundation_factory.plugin] Failed to create any GPU devices, including an attempt with compatibility mode.

Whereas from the provided isaac-sim docker:

[1.438s] [ext: omni.metrics.core-0.0.1] startup
[1.439s] [ext: omni.client.lib-1.0.0] startup
[1.473s] [ext: omni.blobkey-1.1.2] startup
[1.474s] [ext: omni.stats-1.0.1] startup
[1.475s] [ext: omni.datastore-0.0.0] startup
[1.487s] [ext: omni.client-1.2.2] startup
[1.497s] [ext: omni.ujitso.default-1.0.0] startup
[1.500s] [ext: omni.hsscclient-1.1.1] startup
2025-03-25 12:56:27 [1,471ms] [Warning] [omni.datastore] OmniHub is inaccessible
[1.504s] [ext: omni.gpu_foundation.shadercache.vulkan-1.0.0] startup
[1.509s] [ext: omni.assets.plugins-0.0.0] startup
[1.512s] [ext: omni.gpu_foundation-0.0.0] startup
[1.537s] [ext: carb.windowing.plugins-1.0.0] startup
2025-03-25 12:56:27 [1,508ms] [Warning] [carb.windowing-glfw.plugin] GLFW initialization failed.
2025-03-25 12:56:27 [1,508ms] [Warning] [carb] Failed to startup plugin carb.windowing-glfw.plugin (interfaces: [carb::windowing::IGLContext v1.0],[carb::windowing::IWindowing v1.5]) (impl: carb.windowing-glfw.plugin)
[1.539s] [ext: omni.kit.renderer.init-0.0.0] startup
2025-03-25 12:56:27 [1,524ms] [Warning] [omni.platforminfo.plugin] failed to open the default display.  Can't verify X Server version.

|---------------------------------------------------------------------------------------------|
| Driver Version: 535.183.01    | Graphics API: Vulkan
|=============================================================================================|
| GPU | Name                             | Active | LDA | GPU Memory | Vendor-ID | LUID       |
|     |                                  |        |     |            | Device-ID | UUID       |
|     |                                  |        |     |            | Bus-ID    |            |
|---------------------------------------------------------------------------------------------|
| 0   | NVIDIA GeForce RTX 3090          | Yes: 0 |     | 24576   MB | 10de      | 0          |
|     |                                  |        |     |            | 2204      | 4a771d0e.. |
|     |                                  |        |     |            | 4         |            |
|=============================================================================================|
| OS: 22.04.5 LTS (Jammy Jellyfish) ubuntu, Version: 22.04.5, Kernel: 6.11.0-17-generic
| Processor: AMD Ryzen 9 7950X 16-Core Processor
| Cores: 16 | Logical Cores: 32
|---------------------------------------------------------------------------------------------|
| Total Memory (MB): 31210 | Free Memory: 27235
| Total Page/Swap (MB): 4095 | Free Page/Swap: 0
|---------------------------------------------------------------------------------------------|
2025-03-25 12:56:28 [1,906ms] [Warning] [gpu.foundation.plugin] IOMMU is enabled.

Why is isaac-sim not finding my RTX 3090 on my ubuntu 20.04 docker?
In the same docker nvidia-smi returns:

Tue Mar 25 13:35:03 2025       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.01             Driver Version: 535.183.01   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 3090        Off | 00000000:04:00.0 Off |                  N/A |
| 31%   34C    P8              26W / 350W |     10MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
+---------------------------------------------------------------------------------------+

Running within the non-Isaac-Sim container isn’t officially supported. May I know why you couldn’t use the provided Isaac Sim Container? You might need to figure out why nvidia-smi is unable to detect the GPU within the ubuntu:20.04 container or use the official NVIDIA test Isaac Sim container to isolate problems.

nvidia-smi works fine on all hosts and containers, it’s just the isaac sim on Ubuntu 20.04 container that is not detecting the RTX 3090 when nvidia-smi is detecting it.

I have to write custom ros1 extensions for Isaac, and can’t do it on Ubuntu 22.04, I need to load our own code that is built for Ubuntu 20.04 on the extension.
And I can’t use workstation installation, because I want to use the simulator with our extension in our continuous integration pipeline, and these run on dockers.

While it’s not officially supported, please follow Workstation Installation — Isaac Sim Documentation and then try running it within the old Ubuntu-20.04-based container by bind-mounting it into the container.

docker run --name isaac-sim --entrypoint bash -it --runtime=nvidia --gpus all -e "ACCEPT_EULA=Y" --rm --network=host \
-v ~/isaacsim:/isaac-sim:rw \
nvcr.io/nvidia/isaac-sim:2022.2.1

You were right, In that image the mounted sim works.

Could it be that I am missing a dependency or some specific configuration?
Who is detecting the GPU and what could it be causing it to not appear in isaacsim but appear in nvidia-smi.

Could you provide the docker file?

Of course:

FROM ubuntu:20.04
RUN apt update && apt install -y libgl-dev:amd64 libglu1-mesa libxt6 libgomp1 libxrandr2

Then I mount the volume with isaac sim.
I have also tried downloading and unzipping it inside the docker container, and running post install but the results are the same.

I have also applied as many of the changes as I could from IsaacSim-dockerfiles/Dockerfile.2023.1.0-ubuntu20.04 at main · NVIDIA-Omniverse/IsaacSim-dockerfiles · GitHub

To see if it was a particular dependency or env variable, but I haven’t managed to get it to detect my GPU in the ubuntu:20.04 container.

RUN apt-get update && apt-get install -y --no-install-recommends \
    libatomic1 \
    libegl1 \
    libglu1-mesa \
    libgomp1 \
    libsm6 \
    libxi6 \
    libxrandr2 \
    libxt6 \
    libfreetype-dev \
    libfontconfig1 \
    openssl \
    libssl1.1 \
    wget \
    vulkan-utils \
&& apt-get -y autoremove \
&& apt-get clean autoclean \
&& rm -rf /var/lib/apt/lists/*

ARG VULKAN_SDK_VERSION=1.3.224.1
# Download the Vulkan SDK and extract the headers, loaders, layers and binary utilities
RUN wget -q --show-progress \
    --progress=bar:force:noscroll \
    https://sdk.lunarg.com/sdk/download/${VULKAN_SDK_VERSION}/linux/vulkansdk-linux-x86_64-${VULKAN_SDK_VERSION}.tar.gz \
    -O /tmp/vulkansdk-linux-x86_64-${VULKAN_SDK_VERSION}.tar.gz \ 
    && echo "Installing Vulkan SDK ${VULKAN_SDK_VERSION}" \
    && mkdir -p /opt/vulkan \
    && tar -xf /tmp/vulkansdk-linux-x86_64-${VULKAN_SDK_VERSION}.tar.gz -C /opt/vulkan \
    && mkdir -p /usr/local/include/ && cp -ra /opt/vulkan/${VULKAN_SDK_VERSION}/x86_64/include/* /usr/local/include/ \
    && mkdir -p /usr/local/lib && cp -ra /opt/vulkan/${VULKAN_SDK_VERSION}/x86_64/lib/* /usr/local/lib/ \
    && cp -a /opt/vulkan/${VULKAN_SDK_VERSION}/x86_64/lib/libVkLayer_*.so /usr/local/lib \
    && mkdir -p /usr/local/share/vulkan/explicit_layer.d \
    && cp /opt/vulkan/${VULKAN_SDK_VERSION}/x86_64/etc/vulkan/explicit_layer.d/VkLayer_*.json /usr/local/share/vulkan/explicit_layer.d \
    && mkdir -p /usr/local/share/vulkan/registry \
    && cp -a /opt/vulkan/${VULKAN_SDK_VERSION}/x86_64/share/vulkan/registry/* /usr/local/share/vulkan/registry \
    && cp -a /opt/vulkan/${VULKAN_SDK_VERSION}/x86_64/bin/* /usr/local/bin \
    && ldconfig \
    && rm /tmp/vulkansdk-linux-x86_64-${VULKAN_SDK_VERSION}.tar.gz && rm -rf /opt/vulkan

# Setup the required capabilities for the container runtime    
ENV NVIDIA_VISIBLE_DEVICES=all NVIDIA_DRIVER_CAPABILITIES=all

I managed to get it to work by adding -e "NVIDIA_VISIBLE_DEVICES=all" -e "NVIDIA_DRIVER_CAPABILITIES=compute,graphics,utility,display" to my docker run command.

The full command is:
sudo docker run -it --rm --runtime=nvidia --gpus all --network=host --shm-size=2g -e "ACCEPT_EULA=Y" -e "PRIVACY_CONSENT=Y" -e "NVIDIA_VISIBLE_DEVICES=all" -e "NVIDIA_DRIVER_CAPABILITIES=compute,graphics,utility,display" -v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw -v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw -v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw -v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw -v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw -v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw -v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw -v ~/docker/isaac-sim/documents:/root/Documents:rw -v ~/isaacsim:/isaac-sim ubuntu:20.04