NVIDIA / NVIDIA/OpenShell

Docker driver: --gpu allocates GPU but driver libraries (libnvidia-ml.so) not visible inside sandbox

Open
#2,145 4 comments 0 reactions 1 assignee View on GitHub

@elezar is already working on this.

Since Jul 6, 2026.

area:compute state:stale
Dominant language
Rust
Stars
8.7k
Forks
1.3k
Avg merge
2d 11h
Merged PRs (30d)
253

Description

Summary

On the Docker compute driver, openshell sandbox create --gpu 1 successfully allocates a GPU (CDI device selected, container starts, supervisor relay connects, the command runs over SSH), but the NVIDIA driver userspace libraries are not present inside the sandbox. nvidia-smi fails with:

NVIDIA-SMI couldn't find libnvidia-ml.so library in your system.

find / -name 'libnvidia-ml.so*' inside the sandbox returns nothing, even though the exact same CDI device injects the libraries correctly under raw docker run. The nvidia-smi binary is injected, but none of the driver .so libraries are.

Environment

  • OpenShell: 0.0.76 (snap, latest/stable)
  • Docker: docker snap 29.3.1 (rev 3505)
  • snapd: 2.76
  • NVIDIA driver: 535.309.01 (8× Tesla P40)
  • Kernel: 6.8.0-124-generic
  • OS: Ubuntu 22.04.5 LTS
  • Gateway: docker driver, gateway_jwt enabled, allow_unauthenticated_users = true (local single-user, loopback)

What works — raw docker run with the same CDI device

$ docker run --rm --device nvidia.com/gpu=all ubuntu:22.04 nvidia-smi -L
GPU 0: Tesla P40 (UUID: GPU-84ae8966-...)
... all 8 GPUs listed ...

CDI spec: /var/snap/docker/current/etc/cdi/nvidia.yaml (auto-generated by the docker snap); dockerd cdi-spec-dirs includes that path.

What fails — inside an OpenShell sandbox

Base image built with the sandbox contract satisfied (glibc 2.39 via ubuntu:24.04, iproute2, a sandbox user/group):

$ openshell sandbox create --gpu 1 --from <that image> --no-keep --no-tty \
    -- sh -lc 'ldconfig; find / -name "libnvidia-ml.so*"; nvidia-smi -L'
Created sandbox: ...
  Requesting compute...
  Sandbox allocated
  Starting sandbox Container created
  Starting sandbox Waiting for supervisor relay
NVIDIA-SMI couldn't find libnvidia-ml.so library in your system.
# (find returned no libnvidia-ml.so anywhere in the sandbox)

Diagnosis

The CDI spec injects the driver libraries via bind-mounts sourced from the docker snap's hostfs view (/var/lib/snapd/hostfs/usr/lib/x86_64-linux-gnu/...) plus createContainer hooks (nvidia-cdi-hook) that create the libnvidia-ml.so.1 symlink and update ldcache. Under raw docker run this all works.

Inside an OpenShell sandbox, the supervisor performs network-namespace + mount isolation, and the CDI-injected library bind-mounts do not survive into the sandbox's mount namespace. The device nodes (/dev/nvidia*) and the nvidia-smi binary mount appear, but the driver library mounts / ldcache entries do not.

Things that do not help

  • NVIDIA_DRIVER_CAPABILITIES=all / NVIDIA_VISIBLE_DEVICES=all baked into the image
  • Running ldconfig inside the sandbox (the libraries are genuinely absent, not just uncached)

Hypothesis / question

This looks specific to the docker snap, whose CDI mounts are sourced from /var/lib/snapd/hostfs/.... Does the sandbox supervisor's mount isolation drop mounts that originate outside the container's expected roots? Is the Docker --gpu path expected to work with the confined docker snap, or only with system-installed Docker (now supported on snapd 2.76)? Happy to test any patch or a system-Docker configuration.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.