Skip to content

Instantly share code, notes, and snippets.

@marhensa
Last active November 6, 2025 06:55
Show Gist options
  • Select an option

  • Save marhensa/eaed2260c7856e6b1947e255aff91c34 to your computer and use it in GitHub Desktop.

Select an option

Save marhensa/eaed2260c7856e6b1947e255aff91c34 to your computer and use it in GitHub Desktop.
WSL2 Manual Docker Rootless with Nvidia Container Toolkit Enabled
# it's typed on Powershell
wsl --install Debian --name debian --web-download --location "D:\WSL\debian" --no-launch
wsl -d debian

Enter new username and password

# now it's inside WSL2 bash
echo cd ~ >> ~/.bashrc && source ~/.bashrc
sudo nano /etc/wsl.conf
[boot]
systemd=true
[automount]
enabled=false
[interop]
appendWindowsPath=false
[user]
default=wsluser

Ctrl + X to exit, press Y to save

sudo nano /etc/resolv.conf
# kantor
# nameserver 192.168.201.10 8.8.8.8

# rumah
nameserver 8.8.8.8 8.8.4.4

Ctrl + X to exit, press Y to save

mkdir -p ~/dockerstuff
sudo nano /etc/fstab
D:\\WSL\\_docker /home/wsluser/dockerstuff drvfs rw,uid=1000,gid=1000,metadata 0 0

Ctrl + X to exit, press Y to save

Ctrl + D to logout from WSL2

# it's typed on Powershell
wsl --terminate debian
wsl -d debian
# now it's inside WSL2 bash
cd ~/dockerstuff
mkdir -p vol
mkdir -p compose
mkdir -p images
mkdir -p build
cd ~
sudo apt update && sudo apt upgrade
sudo apt install -y ca-certificates curl gnupg uidmap

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
  && sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the Docker repository to Apt sources
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Add the NVIDIA GPG key and repository
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
  sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin \
  nvidia-container-toolkit

dockerd-rootless-setuptool.sh install
source ~/.bashrc
sudo loginctl enable-linger $USER
nvidia-ctk runtime configure --runtime=docker --config=$HOME/.config/docker/daemon.json

# specific WSL2 Fix for Nvidia Container Toolkit
sudo sed -i 's/#no-cgroups = false/no-cgroups = true/' /etc/nvidia-container-runtime/config.toml

systemctl --user restart docker

Ctrl + D to logout from WSL2

# it's typed on Powershell
wsl --terminate debian
wsl --export debian D:\WSL\_backup\debian-docker-labs.tar
wsl -d debian
# now it's inside WSL2 bash
sudo apt update && sudo apt upgrade
sudo apt install -y build-essential cmake clang
# Testing the docker container with Nvidia GPU capabilities enabled
docker run --rm --gpus all nvidia/cuda:12.9.1-base-ubuntu24.04 nvidia-smi
# it's typed on Powershell
wsl --install Fedora --name fedora --web-download --location "D:\WSL\fedora" --no-launch
wsl -d fedora

Enter new username and password

# now it's inside WSL2 bash
echo cd ~ >> ~/.bashrc && source ~/.bashrc
sudo nano /etc/wsl.conf
[boot]
systemd=true
[automount]
enabled=false
[interop]
appendWindowsPath=false
[user]
default=wsluser

Ctrl + X to exit, press Y to save

sudo nano /etc/resolv.conf
# kantor
# nameserver 192.168.201.10 8.8.8.8

# rumah
nameserver 8.8.8.8 8.8.4.4

Ctrl + X to exit, press Y to save

mkdir -p ~/dockerstuff
sudo nano /etc/fstab
D:\\WSL\\_docker /home/wsluser/dockerstuff drvfs rw,uid=1000,gid=1000,metadata 0 0

Ctrl + X to exit, press Y to save

Ctrl + D to logout from WSL2

# it's typed on Powershell
wsl --terminate fedora
wsl -d fedora
# now it's inside WSL2 bash
cd ~/dockerstuff
mkdir -p vol
mkdir -p compose
mkdir -p images
mkdir -p build
cd ~
sudo dnf upgrade --refresh -y

# Add Docker repository
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager addrepo --from-repofile https://download.docker.com/linux/fedora/docker-ce.repo

# Add NVIDIA repository
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin \
  nvidia-container-toolkit
  
dockerd-rootless-setuptool.sh install
source ~/.bashrc
sudo loginctl enable-linger $USER
nvidia-ctk runtime configure --runtime=docker --config=$HOME/.config/docker/daemon.json

# specific WSL2 Fix for Nvidia Container Toolkit
sudo sed -i 's/#no-cgroups = false/no-cgroups = true/' /etc/nvidia-container-runtime/config.toml

systemctl --user restart docker

Ctrl + D to logout from WSL2

# it's typed on Powershell
wsl --terminate fedora
wsl --export fedora D:\WSL\_backup\fedora-docker-labs.tar
wsl -d fedora
# now it's inside WSL2 bash
sudo dnf upgrade --refresh -y
sudo dnf group install -y development-tools c-development && \
sudo dnf install -y cmake clang
# Test the docker container with Nvidia GPU capabilities enabled
docker run --rm --gpus all nvidia/cuda:12.9.1-base-ubuntu24.04 nvidia-smi
# it's typed on Powershell
wsl --install Fedora --name fedora-podman --web-download --location "D:\WSL\fedora-podman" --no-launch
wsl -d fedora-podman

Enter new username and password

# now it's inside WSL2 bash
echo cd ~ >> ~/.bashrc && source ~/.bashrc
sudo nano /etc/wsl.conf
[boot]
systemd=true
[automount]
enabled=false
[interop]
appendWindowsPath=false
[user]
default=wsluser

Ctrl + X to exit, press Y to save

sudo nano /etc/resolv.conf
# kantor
# nameserver 192.168.201.10 8.8.8.8

# rumah
nameserver 8.8.8.8 8.8.4.4

Ctrl + X to exit, press Y to save

mkdir -p ~/dockerstuff
sudo nano /etc/fstab
D:\\WSL\\_docker /home/wsluser/dockerstuff drvfs rw,uid=1000,gid=1000,metadata 0 0

Ctrl + X to exit, press Y to save

Ctrl + D to logout from WSL2

# it's typed on Powershell
wsl --terminate fedora-podman
wsl -d fedora-podman
# now it's inside WSL2 bash
cd ~/dockerstuff
mkdir -p vol
mkdir -p compose
mkdir -p images
mkdir -p build
cd ~
# Update the system
sudo dnf upgrade --refresh -y

# Add the NVIDIA repository (this is the same for Docker and Podman)
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
# Install the NVIDIA toolkit and ensure Podman is up-to-date
sudo dnf install -y podman nvidia-container-toolkit

# Enable user services to run after logout (good practice)
sudo loginctl enable-linger $USER

# Generate the CDI specification for Podman
sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml

# Apply the specific WSL2 Fix for the Nvidia Container Runtime
sudo sed -i 's/#no-cgroups = false/no-cgroups = true/' /etc/nvidia-container-runtime/config.toml
sudo mount --make-rshared /

Ctrl + D to logout from WSL2

# it's typed on Powershell
wsl --terminate fedora-podman
wsl --export fedora-podman D:\WSL\_backup\fedora-podman-labs.tar
wsl -d fedora-podman
# now it's inside WSL2 bash
sudo dnf upgrade --refresh -y
sudo dnf group install -y development-tools c-development && \
sudo dnf install -y cmake clang
# Test the container with Nvidia GPU capabilities enabled using Podman
podman run --rm --gpus all nvidia/cuda:12.9.1-base-ubuntu24.04 nvidia-smi
# Optional to redirect docker command to podman command
sudo dnf install -y podman-docker
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment