Skip to content

Docker GPU Error After Installing nvidia-docker2 ​

Problem Statement ​

Users encounter the following Docker error when attempting to use NVIDIA GPU capabilities in containers, even after installing nvidia-docker2 and updating NVIDIA drivers:

bash
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]

This error typically occurs on Linux systems (like Ubuntu 22.04) where:

  • NVIDIA drivers are properly installed (nvidia-smi works on the host)
  • nvidia-docker2 packages have been installed according to official documentation
  • Docker commands requiring GPU acceleration fail unexpectedly
  • Rebooting the system doesn't resolve the issue

The most common causes include conflicts with Docker installation methods and incomplete NVIDIA Container Toolkit setup.

Verified Solutions ​

1. Properly Install NVIDIA Container Toolkit ​

::alert{type="warning"} Important: The nvidia-docker2 package requires explicit configuration of the NVIDIA Container Toolkit to function correctly. ::

bash
# Step 1: Add repository and update
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 && \
  sudo apt-get update

# Step 2: Install the toolkit
sudo apt-get install -y nvidia-container-toolkit

# Step 3: Configure Docker runtime
sudo nvidia-ctk runtime configure --runtime=docker

# Step 4: Restart Docker
sudo systemctl restart docker

After installation, verify with a test container:

bash
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

::alert{type="info"} Explanation: Many users install nvidia-docker2 but miss the required configuration steps. This explicitly configures Docker to use NVIDIA GPU resources through Linux containers. ::

2. Resolve Snap Installation Conflicts ​

::alert{type="danger"} If you have Docker installed via Snap, this will conflict with NVIDIA Docker configurations. ::

  1. Remove conflicting Snap installation:

    bash
    sudo snap remove docker
  2. Purge all Docker components:

    bash
    sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  3. Reinstall Docker from official repositories following the official Docker installation guide

  4. Reinstall nvidia-docker2:

    bash
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
       && 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/$distribution/libnvidia-container.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
    sudo apt-get update
    sudo apt-get install -y nvidia-docker2
    sudo systemctl restart docker

::alert{type="info"} Explanation: Snap installations manage services differently and often conflict with manual Docker configurations. A clean installation using native packages eliminates configuration mismatches. ::

3. Verify CUDA Toolkit Installation ​

The GPU driver alone isn't sufficient for Docker GPU support. Ensure CUDA toolkit is installed:

  1. Check CUDA version compatibility with your drivers:

    bash
    nvidia-smi

    Look for the "CUDA Version" field in the output

  2. Install CUDA Toolkit if missing:

    bash
    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
    sudo dpkg -i cuda-keyring_1.1-1_all.deb
    sudo apt update
    sudo apt -y install cuda-toolkit-12-3
  3. Add to your .bashrc:

    bash
    echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
    echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
    source ~/.bashrc

4. Full Purge and Reinstall (Last Resort) ​

  1. Remove all Docker and NVIDIA Docker packages:

    bash
    sudo apt purge nvidia-container* nvidia-docker* docker*
    sudo rm -rf /var/lib/docker
    sudo rm -rf /etc/docker
  2. Reinstall core dependencies:

    bash
    sudo apt install -f 
    sudo apt autoremove
    sudo apt update
  3. Reinstall Docker and NVIDIA Docker following the official guide from both:

Final Verification ​

Validate your installation with both:

bash
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
bash
sudo docker run --rm -it --gpus all ubuntu nvidia-smi

Expected output shows GPU information identical to running nvidia-smi on the host machine.

::alert{type="success"} Best Practice Tip: Always install Docker from official repositories rather than Snap to avoid configuration conflicts with GPU drivers. Maintain consistent driver versions across host system and Docker images. :::