Salta ai contenuti

Risoluzione dei problemi

”Conflict. The container name is already in use”

Sezione intitolata “”Conflict. The container name is already in use””
Terminal window
docker rm -f devcontainer
docker compose up -d

L’immagine potrebbe essere obsoleta. Scaricate l’ultima versione e riavviate:

Terminal window
docker compose pull
docker compose up -d

L’entrypoint popola ~/.claude.json con i flag di onboarding. Se mancante:

Terminal window
echo '{"hasCompletedOnboarding": true}' > ~/.claude.json

Verificate quale valore è effettivamente impostato:

Terminal window
echo "$ANTHROPIC_API_KEY"

Cause comuni:

  • Chiave proxy LiteLLM mancante o non valida — se state utilizzando la modalità proxy, assicuratevi che LITELLM_API_KEY nel file .env contenga le credenziali proxy corrette, quindi riavviate il container affinché l’entrypoint possa derivare ANTHROPIC_API_KEY.
  • Token OAuth o mancata corrispondenza della modalità proxy — utilizzate esattamente una modalità di autenticazione. Se CLAUDE_CODE_OAUTH_TOKEN è impostato, ha la precedenza sulla modalità proxy LiteLLM.

Verificate che la vostra chiave API sia impostata correttamente:

Terminal window
echo "$ANTHROPIC_API_KEY"

Verificate che funzioni effettuando una chiamata diretta al vostro provider.

Il modello è determinato dal vostro provider e dalla chiave API. Consultate la documentazione del vostro provider per i modelli disponibili.

La CLI gh richiede una variabile d’ambiente GH_TOKEN. Aggiungetela al vostro file .env:

GH_TOKEN=ghp_your-token-here

Create un token su github.com/settings/tokens. Funzionano sia i token a grana fine (consigliati) che i token classici con scope repo. Riavviate il container dopo aver aggiornato .env.

Quando GH_TOKEN è impostato, l’entrypoint esegue gh auth setup-git per configurare l’helper delle credenziali git per HTTPS. Se le operazioni HTTPS falliscono:

  1. Verificate che il token sia valido: gh auth status
  2. Controllate che l’helper delle credenziali sia configurato: git config --global credential.helper
  3. Riavviate il container per rieseguire l’entrypoint

Entrambi i metodi di autenticazione possono coesistere nel container:

  • SSH (SSH_PRIVATE_KEY nel .env) — utilizza URL git@github.com:. Necessario se la vostra organizzazione impone SSH.
  • HTTPS (GH_TOKEN nel .env) — utilizza URL https://github.com/. Configurazione più semplice, nessuna gestione delle chiavi.

Se entrambi sono configurati, git utilizza il protocollo corrispondente all’URL remoto. Per cambiare un clone esistente:

Terminal window
# Da SSH a HTTPS
git remote set-url origin https://github.com/owner/repo.git
# Da HTTPS a SSH
git remote set-url origin git@github.com:owner/repo.git
Terminal window
sudo chown -R $(id -u):$(id -g) /workspace ~

L’entrypoint configura automaticamente un prefisso globale npm scrivibile dall’utente in ~/.npm-global, quindi i comandi npm install -g a runtime dovrebbero funzionare senza sudo. Se continuate a vedere errori EACCES, applicate la correzione manualmente:

Terminal window
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
export PATH="$HOME/.npm-global/bin:$PATH"

La prima build scarica l’immagine base (~1 GB). Le build successive utilizzano la cache. Se è lenta ogni volta:

Terminal window
docker builder prune
Terminal window
docker system prune -a --volumes

Attenzione: Questo rimuove tutti i container, le immagini e i volumi inutilizzati — non solo quelli di questo progetto.

Impossibile raggiungere internet dall’interno del container

Sezione intitolata “Impossibile raggiungere internet dall’interno del container”
Terminal window
ping -c 1 8.8.8.8
nslookup google.com
curl -I https://github.com

Se il DNS fallisce, aggiungete a /etc/docker/daemon.json sull’host:

{
"dns": ["8.8.8.8", "8.8.4.4"]
}

Quindi riavviate Docker.

Xvfb potrebbe non essersi avviato. Verificate all’interno del container:

Terminal window
ps aux | grep Xvfb

Se non è in esecuzione, controllate che ENABLE_VNC non sia impostato su false e riavviate il container.

Errore “Cannot open display” o “No display”

Sezione intitolata “Errore “Cannot open display” o “No display””

La variabile d’ambiente DISPLAY potrebbe non essere impostata. Verificate:

Terminal window
echo "$DISPLAY"

Dovrebbe essere :99. Se è vuota, aggiungete DISPLAY=:99 al vostro .env o devcontainer.json e riavviate.

noVNC potrebbe non essere in esecuzione. Verificate all’interno del container:

Terminal window
ps aux | grep -E 'novnc|websockify'

Se non è in esecuzione, verificate che ENABLE_VNC sia true (il valore predefinito) e controllate i log del container:

Terminal window
docker compose logs dev | grep -i vnc

Cambiate la porta host in docker-compose.yml:

ports:
- "127.0.0.1:16080:6080"

L’istanza condivisa di Chrome dovrebbe essere in esecuzione sulla porta 9222. Verificate all’interno del container:

Terminal window
# Chrome è in esecuzione?
curl http://localhost:9222/json/version
# Controllate i log di Chrome
cat ~/.local/share/chrome-browser/chrome.log
# Verificate il symlink
ls -la /opt/google/chrome/chrome
# Riavviate Chrome manualmente
. /usr/local/lib/chrome-browser.sh
start_chrome_browser

Se il symlink è mancante, scaricate l’ultima immagine e riavviate il container.

Con l’architettura a browser condiviso, gli errori di blocco del profilo non dovrebbero verificarsi. Se ne vedete uno, un processo Chrome residuo potrebbe trattenere il blocco:

Terminal window
# Terminare eventuali processi Chrome residui
pkill -f 'chrome.*remote-debugging-port' || true
# Rimuovere il file di blocco
rm -f ~/.cache/chrome-devtools-mcp/chrome-profile/SingletonLock
# Riavviare Chrome
. /usr/local/lib/chrome-browser.sh
start_chrome_browser

Il server chrome-devtools-mcp è ora registrato globalmente in ~/.claude/settings.json. Se avete un .mcp.json per repository che lo registra anch’esso, vedrete strumenti duplicati. Rimuovete la voce chrome-devtools-mcp dai file .mcp.json per repository:

Terminal window
# Controllare la configurazione per repository
cat .mcp.json

Rimuovete la chiave chrome-devtools-mcp da qualsiasi .mcp.json per repository per utilizzare la registrazione globale.

Terminal window
docker compose down -v
docker rm -f devcontainer 2>/dev/null
docker compose pull
docker compose up -d

Questo distrugge tutti i dati nei volumi. Dovrete clonare nuovamente i repository e riconfigurare gli strumenti.