> ## Content Index
> Fetch the complete content index at: https://adrianoamalfi.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Docker in Windows WSL senza Docker Desktop: setup per un AI Lab
- URL: https://adrianoamalfi.com/tech-scratchpad/docker-wsl-ai-lab/
- Published: 2026-07-30T18:08:58.000Z
- Updated: 2026-07-30T18:08:58.000Z
- Description: 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.
- Author: Adriano Amalfi
- Tags: Scratchpad, Docker, WSL, AI Lab, Tutorial, Local AI, #Tech Scratchpad: Appunti avanzati e esperimenti per esperti e amatoriali

*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:

```powershell
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:

```powershell
wsl --list --online
```

Vedrai `Ubuntu-24.04` nella lista. Installala con:

```powershell
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:

```powershell
wsl --list --verbose
```

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

```powershell
wsl --set-version Ubuntu-24.04 2
```

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

```bash
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:

```bash
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:

```bash
# 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:

```bash
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:

```bash
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:

```bash
ps --no-headers -o comm 1
```

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

```bash
sudo systemctl enable docker --now
```

Controlla che il demone sia partito:

```bash
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:

```ini
[boot]
systemd=true
```

Poi da PowerShell termina la distribuzione e riaprila:

```powershell
wsl --terminate Ubuntu-24.04
```

Se non vuoi systemd, avvia dockerd a mano:

```bash
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`*:

```bash
sudo usermod -aG docker $USER
```

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

```bash
newgrp docker
```

Ora verifica che `docker ps` funzioni senza `sudo`:

```bash
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:

```bash
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](https://www.nvidia.com/download/index.aspx?ref=adrianoamalfi.com) 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:

```bash
# 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:

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

Prova con un container CUDA:

```bash
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:

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

Con GPU:

```bash
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:

```bash
docker exec ollama ollama pull llama3.2
```

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

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

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

### 6.2 Avvia Open WebUI

```bash
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:

```text
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:

```bash
# 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](https://www.portainer.io/?ref=adrianoamalfi.com) 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 ](https://opencode.ai/go?ref=SZ5ZSQC609)