Vai al contenuto

Docker in Windows WSL senza Docker Desktop: setup per un AI Lab

Guida all'installazione di Docker Engine su WSL2 (Ubuntu 24.04) senza Docker Desktop. Configura GPU NVIDIA, Ollama e Open WebUI per un AI Lab locale.

Docker in Windows WSL senza Docker Desktop: setup per un AI Lab

Testato il: 2026-07-30 Ambiente: Windows 11 · Ubuntu 24.04 LTS (WSL2) · Docker 29.6.1 · NVIDIA GPU opzionale

Prerequisiti

  • Windows 11 (build 22621 o superiore) con virtualizzazione abilitata nel BIOS
  • Almeno 8 GB di RAM e 20 GB di spazio libero su disco
  • WSL2 già installato e funzionante (verificato al passo 1 se non lo è)
  • NVIDIA GPU con driver recenti installati su Windows, se vuoi usare la GPU nei container
  • Conoscenza di base del terminale Linux

Non ti serve una licenza Docker Desktop, che da tempo richiede un abbonamento commerciale per uso professionale. Docker Engine è open source e completamente gratuito.

1. Installare WSL2 e Ubuntu 24.04

Se WSL2 non è già attivo, aprilo da PowerShell come amministratore:

wsl --install

Questo comando abilita il subsystem WSL, attiva la virtualizzazione, scarica il kernel Linux e installa Ubuntu come distribuzione predefinita, tutto con WSL2 come versione. Fatto, riavvia Windows.

Se WSL è già installato ma vuoi forzare Ubuntu 24.04, verifica le distribuzioni disponibili:

wsl --list --online

Vedrai Ubuntu-24.04 nella lista. Installala con:

wsl --install -d Ubuntu-24.04

Al primo avvio ti verrà chiesto di creare un utente e una password Linux. Fatto questo, controlla di essere su WSL2:

wsl --list --verbose

L'output mostra VERSION 2 accanto a Ubuntu-24.04. Se vedi VERSION 1, converti con:

wsl --set-version Ubuntu-24.04 2

Ora apri Ubuntu dal menu Start o da PowerShell con wsl. Aggiorna i pacchetti di sistema:

sudo apt update && sudo apt upgrade -y

2. Installare Docker Engine (senza Docker Desktop)

Non usare sudo apt install docker.io: quello è il pacchetto mantenuto da Ubuntu, quasi sempre indietro di diverse versioni rispetto all'ultimo Docker Engine e con una serie di incompatibilità note con compose e buildx. L'unica strada pulita è il repository ufficiale Docker.

Mai usare docker.io — Il pacchetto `docker.io` di Ubuntu è quasi sempre indietro di versioni e causa incompatibilità con compose e buildx. Segui la procedura col repository ufficiale Docker.

Prima di tutto, rimuovi eventuali pacchetti in conflitto:

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc 2>/dev/null
sudo apt autoremove -y

Poi aggiungi il repository ufficiale Docker:

# Installa i prerequisiti
sudo apt update
sudo apt install -y ca-certificates curl

# Crea la directory per le keyring
sudo install -m 0755 -d /etc/apt/keyrings

# Scarica e installa la GPG key ufficiale Docker
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Aggiungi il repository
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Ora installa Docker Engine e i plugin:

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Il pacchetto docker-compose-plugin è quello che ti dà docker compose (con lo spazio), il plugin V2 integrato nel CLI Docker. Il vecchio docker-compose (con il trattino) è dismesso: dimenticalo.

Verifica cosa hai installato:

docker --version
docker compose version

Vedrai qualcosa come Docker version 29.6.1, build .... Il numero esatto può variare, l'importante è che sia >= 26.

3. Avviare Docker e abilitare l'avvio automatico

Su Ubuntu 24.04 in WSL, systemd è abilitato di default (da WSL 2.0 in poi). Controlla che sia attivo:

ps --no-headers -o comm 1

Se l'output è systemd, sei a posto. Avvia Docker e abilitalo al boot della distribuzione:

sudo systemctl enable docker --now

Controlla che il demone sia partito:

sudo systemctl status docker

L'output mostra active (running).

Se systemd non è attivo

Su installazioni WSL più vecchie o se hai deliberatamente disabilitato systemd, modifica /etc/wsl.conf e aggiungi:

[boot]
systemd=true

Poi da PowerShell termina la distribuzione e riaprila:

wsl --terminate Ubuntu-24.04

Se non vuoi systemd, avvia dockerd a mano:

sudo dockerd &

Ma systemd è la strada pulita: la usi e te ne dimentichi.

Docker si avvia ma WSL no

WSL non parte automaticamente all'avvio di Windows. Se vuoi che Docker sia disponibile subito dopo il login, crea uno script PowerShell che lanci wsl in background e mettilo in esecuzione automatica, oppure apri WSL manualmente quando ti serve.

4. Configurare Docker senza sudo

Di default solo root può usare Docker. Aggiungi il tuo utente al gruppo docker:

sudo usermod -aG docker $USER

Esci dalla shell WSL e rientra (o usa newgrp docker nella sessione corrente):

newgrp docker

Ora verifica che docker ps funzioni senza sudo:

docker ps
docker run --rm hello-world

Il secondo comando stampa Hello from Docker! e un messaggio di conferma. Se vedi permission denied while trying to connect to the Docker daemon socket, il tuo utente non è ancora nel gruppo: esci e rientra nella distribuzione.

Permission denied? Forza il refresh dei gruppi — Dopo aver aggiunto il tuo utente al gruppo `docker`, esci completamente dalla shell WSL e rientra. Se `docker ps` dà ancora "permission denied", usa `wsl --terminate Ubuntu-24.04` da PowerShell per forzare il refresh dei gruppi.

5. (Opzionale) Abilitare GPU NVIDIA per i container

Se hai una GPU NVIDIA e vuoi usarla per l'inferenza nei container Docker, ti serve il NVIDIA Container Toolkit. I driver NVIDIA vanno installati su Windows, non dentro WSL: WSL2 li eredita automaticamente.

Verifica che i driver siano visibili da WSL:

nvidia-smi

Se vedi la tabella con la tua GPU, sei a posto. Se il comando non esiste, i driver NVIDIA non sono installati su Windows: installali prima dal sito NVIDIA e riprova.

GPU solo su WSL2 con Windows 11 — Il passthrough GPU funziona esclusivamente con WSL2 e Windows 11. Su WSL1 o Windows 10 non è supportato. I driver NVIDIA vanno installati su Windows, non dentro la distribuzione Linux — WSL2 li eredita automaticamente.

Ora installa il NVIDIA Container Toolkit:

# Prerequisiti
sudo apt update
sudo apt install -y ca-certificates curl gnupg2

# Aggiungi il repository NVIDIA
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 update
sudo apt install -y nvidia-container-toolkit

Configura il runtime NVIDIA per Docker e riavvia il demone:

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Prova con un container CUDA:

docker run --rm --gpus all nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi

Vedrai la stessa tabella GPU di prima. Se ottieni could not select device driver, il toolkit non è configurato correttamente: riavvia la shell WSL e riprova.

6. Verificare con un workload AI: Ollama + Open WebUI

Per completare, mettiamo su un mini AI Lab con Ollama (inferenza locale) e Open WebUI (interfaccia chat).

6.1 Avvia Ollama

Senza GPU:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Con GPU:

docker run -d --gpus all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Scarica un modello piccolo per il test. llama3.2 (circa 2 GB) è un buon compromesso tra qualità e velocità di download:

docker exec ollama ollama pull llama3.2

Vedrai scorrere le barre di download dei layer del modello. Fatto, controlla che Ollama risponda:

curl http://localhost:11434/api/tags

Vedrai un JSON con "name": "llama3.2:latest" nel campo models.

6.2 Avvia Open WebUI

docker run -d \
  -p 3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main

Con --add-host Open WebUI raggiunge Ollama sul container host via host.docker.internal. Il volume open-webui conserva chat, impostazioni e utenti tra un riavvio e l'altro.

Apri il browser su http://localhost:3000. Crea un account (il primo è automaticamente amministratore), poi vai su Settings > Admin Settings > Connections e imposta l'URL di Ollama:

http://host.docker.internal:11434

Salva, torna alla chat e scrivi un messaggio di prova. Se il modello risponde, hai un AI Lab locale funzionante su WSL.

Verifica

Esegui questi comandi per controllare che lo stack sia operativo:

# 1. Docker Engine attivo e accessibile
docker info

# 2. Docker Compose integrato nel CLI
docker compose version

# 3. Container di test base
docker run --rm hello-world

# 4. Container Ollama risponde
curl http://localhost:11434/api/tags

# 5. (Solo se hai GPU) GPU NVIDIA accessibile via container
docker run --rm --gpus all nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi

Se tutto funziona, tutti i comandi terminano senza errori.

Limiti noti

  • Performance I/O su filesystem Windows. Le operazioni su /mnt/c/ sono sensibilmente più lente del filesystem nativo Linux. Tieni i volumi Docker dentro WSL (i volumi con nome come ollama e open-webui lo fanno automaticamente). Non montare cartelle Windows come volumi Docker se hai carichi I/O intensivi.
  • WSL non parte all'avvio di Windows. Docker non sarà disponibile finché non apri almeno un terminale WSL. Se ti serve un demone sempre attivo, considera un vero server Linux o una VM.
  • Rete isolata. WSL2 ha un suo network namespace con un IP privato. localhost funziona per il port forwarding automatico, ma se hai bisogno di accedere a container da altre macchine in LAN, devi configurare un proxy o usare wsl hostname -I per trovare l'IP WSL e fare port forwarding manuale.
  • GPU solo su WSL2 con Windows 11. WSL1 e Windows 10 non supportano il passthrough GPU. E i driver NVIDIA devono essere installati lato Windows, non dentro la distribuzione Linux.
  • Niente Docker Desktop = niente GUI. Docker Engine è solo demone e CLI. Se ti serve un'interfaccia grafica per gestire container, image e volumi, valuta Portainer in un container, oppure usa l'estensione Docker per VS Code.
SPONSORED

Usa il mio link di referral, se ti iscrivi e ti abboni a Go, entrambi riceveremo un credito di utilizzo di $5 da applicare ai limiti di utilizzo Go


Abbonati a Opencode a 5$ e riscatta 5$ di cretito
Condividi