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.
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 --installQuesto 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 --onlineVedrai Ubuntu-24.04 nella lista. Installala con:
wsl --install -d Ubuntu-24.04Al primo avvio ti verrà chiesto di creare un utente e una password Linux. Fatto questo, controlla di essere su WSL2:
wsl --list --verboseL'output mostra VERSION 2 accanto a Ubuntu-24.04. Se vedi VERSION 1, converti con:
wsl --set-version Ubuntu-24.04 2Ora apri Ubuntu dal menu Start o da PowerShell con wsl. Aggiorna i pacchetti di sistema:
sudo apt update && sudo apt upgrade -y2. 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.
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 -yPoi 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 updateOra installa Docker Engine e i plugin:
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginIl 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 versionVedrai 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 1Se l'output è systemd, sei a posto. Avvia Docker e abilitalo al boot della distribuzione:
sudo systemctl enable docker --nowControlla che il demone sia partito:
sudo systemctl status dockerL'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=truePoi da PowerShell termina la distribuzione e riaprila:
wsl --terminate Ubuntu-24.04Se 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 $USEREsci dalla shell WSL e rientra (o usa newgrp docker nella sessione corrente):
newgrp dockerOra verifica che docker ps funzioni senza sudo:
docker ps
docker run --rm hello-worldIl 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.
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-smiSe 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.
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-toolkitConfigura il runtime NVIDIA per Docker e riavvia il demone:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart dockerProva con un container CUDA:
docker run --rm --gpus all nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smiVedrai 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/ollamaCon GPU:
docker run -d --gpus all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollamaScarica 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.2Vedrai scorrere le barre di download dei layer del modello. Fatto, controlla che Ollama risponda:
curl http://localhost:11434/api/tagsVedrai 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:mainCon --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:11434Salva, 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-smiSe 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 comeollamaeopen-webuilo 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.
localhostfunziona per il port forwarding automatico, ma se hai bisogno di accedere a container da altre macchine in LAN, devi configurare un proxy o usarewsl hostname -Iper 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.
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