- Home
- Contenitore di sviluppo
- Risoluzione dei problemi
Risoluzione dei problemi
Il container non si avvia
Sezione intitolata “Il container non si avvia””Conflict. The container name is already in use”
Sezione intitolata “”Conflict. The container name is already in use””docker rm -f devcontainerdocker compose up -dpodman rm -f devcontainerpodman-compose up -dGli strumenti AI non funzionano
Sezione intitolata “Gli strumenti AI non funzionano””claude: command not found”
Sezione intitolata “”claude: command not found””L’immagine potrebbe essere obsoleta. Scaricate l’ultima versione e riavviate:
docker compose pulldocker compose up -dpodman-compose pullpodman-compose up -dClaude mostra “Not logged in”
Sezione intitolata “Claude mostra “Not logged in””L’entrypoint popola ~/.claude.json con i flag di onboarding. Se mancante:
echo '{"hasCompletedOnboarding": true}' > ~/.claude.jsonClaude mostra “Invalid API key”
Sezione intitolata “Claude mostra “Invalid API key””Verificate quale valore è effettivamente impostato:
echo "$ANTHROPIC_API_KEY"Cause comuni:
- Chiave proxy LiteLLM mancante o non valida — se state utilizzando la modalità proxy, assicuratevi che
LITELLM_API_KEYnel file.envcontenga le credenziali proxy corrette, quindi riavviate il container affinché l’entrypoint possa derivareANTHROPIC_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.
Le richieste API falliscono con 401
Sezione intitolata “Le richieste API falliscono con 401”Verificate che la vostra chiave API sia impostata correttamente:
echo "$ANTHROPIC_API_KEY"Verificate che funzioni effettuando una chiamata diretta al vostro provider.
Claude dice “model not found”
Sezione intitolata “Claude dice “model not found””Il modello è determinato dal vostro provider e dalla chiave API. Consultate la documentazione del vostro provider per i modelli disponibili.
GitHub CLI
Sezione intitolata “GitHub CLI””gh: not authenticated”
Sezione intitolata “”gh: not authenticated””La CLI gh richiede una variabile d’ambiente GH_TOKEN. Aggiungetela al vostro file .env:
GH_TOKEN=ghp_your-token-hereCreate 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.
Il clone git via HTTPS fallisce con 401
Sezione intitolata “Il clone git via HTTPS fallisce con 401”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:
- Verificate che il token sia valido:
gh auth status - Controllate che l’helper delle credenziali sia configurato:
git config --global credential.helper - Riavviate il container per rieseguire l’entrypoint
SSH vs HTTPS
Sezione intitolata “SSH vs HTTPS”Entrambi i metodi di autenticazione possono coesistere nel container:
- SSH (
SSH_PRIVATE_KEYnel.env) — utilizza URLgit@github.com:. Necessario se la vostra organizzazione impone SSH. - HTTPS (
GH_TOKENnel.env) — utilizza URLhttps://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:
# Da SSH a HTTPSgit remote set-url origin https://github.com/owner/repo.git
# Da HTTPS a SSHgit remote set-url origin git@github.com:owner/repo.gitProblemi di permessi
Sezione intitolata “Problemi di permessi””Permission denied” su /workspace o /home
Sezione intitolata “”Permission denied” su /workspace o /home”sudo chown -R $(id -u):$(id -g) /workspace ~npm install fallisce con EACCES
Sezione intitolata “npm install fallisce con EACCES”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:
mkdir -p ~/.npm-globalnpm config set prefix ~/.npm-globalexport PATH="$HOME/.npm-global/bin:$PATH"Problemi di build
Sezione intitolata “Problemi di build”La build richiede molto tempo
Sezione intitolata “La build richiede molto tempo”La prima build scarica l’immagine base (~1 GB). Le build successive utilizzano la cache. Se è lenta ogni volta:
docker builder prunepodman builder prune“No space left on device”
Sezione intitolata ““No space left on device””docker system prune -a --volumespodman system prune -a --volumesAttenzione: 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”ping -c 1 8.8.8.8nslookup google.comcurl -I https://github.comSe il DNS fallisce, aggiungete a /etc/docker/daemon.json sull’host:
{ "dns": ["8.8.8.8", "8.8.4.4"]}Quindi riavviate Docker.
Se il DNS fallisce, configurate il DNS all’interno della macchina Podman:
podman machine sshsudo sh -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'exitOppure aggiungete le impostazioni DNS a ~/.config/containers/containers.conf sull’host:
[containers]dns_servers = ["8.8.8.8", "8.8.4.4"]Quindi riavviate Podman: podman machine stop && podman machine start.
Display remoto (noVNC)
Sezione intitolata “Display remoto (noVNC)”Schermo nero in noVNC
Sezione intitolata “Schermo nero in noVNC”Xvfb potrebbe non essersi avviato. Verificate all’interno del container:
ps aux | grep XvfbSe 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:
echo "$DISPLAY"Dovrebbe essere :99. Se è vuota, aggiungete DISPLAY=:99 al vostro .env o devcontainer.json e riavviate.
Connessione rifiutata sulla porta 6080
Sezione intitolata “Connessione rifiutata sulla porta 6080”noVNC potrebbe non essere in esecuzione. Verificate all’interno del container:
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:
docker compose logs dev | grep -i vncpodman-compose logs dev | grep -i vncPorta 6080 già in uso
Sezione intitolata “Porta 6080 già in uso”Cambiate la porta host in docker-compose.yml:
ports: - "127.0.0.1:16080:6080"Chrome DevTools MCP
Sezione intitolata “Chrome DevTools MCP”Il debug remoto di Chrome non risponde
Sezione intitolata “Il debug remoto di Chrome non risponde”L’istanza condivisa di Chrome dovrebbe essere in esecuzione sulla porta 9222. Verificate all’interno del container:
# Chrome è in esecuzione?curl http://localhost:9222/json/version
# Controllate i log di Chromecat ~/.local/share/chrome-browser/chrome.log
# Verificate il symlinkls -la /opt/google/chrome/chrome
# Riavviate Chrome manualmente. /usr/local/lib/chrome-browser.shstart_chrome_browserSe il symlink è mancante, scaricate l’ultima immagine e riavviate il container.
Errore di blocco del profilo del browser
Sezione intitolata “Errore di blocco del profilo del browser”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:
# Terminare eventuali processi Chrome residuipkill -f 'chrome.*remote-debugging-port' || true
# Rimuovere il file di bloccorm -f ~/.cache/chrome-devtools-mcp/chrome-profile/SingletonLock
# Riavviare Chrome. /usr/local/lib/chrome-browser.shstart_chrome_browserStrumenti chrome-devtools-mcp duplicati
Sezione intitolata “Strumenti chrome-devtools-mcp duplicati”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:
# Controllare la configurazione per repositorycat .mcp.jsonRimuovete la chiave chrome-devtools-mcp da qualsiasi .mcp.json per repository per utilizzare la registrazione globale.
Ripristino completo
Sezione intitolata “Ripristino completo”docker compose down -vdocker rm -f devcontainer 2>/dev/nulldocker compose pulldocker compose up -dpodman-compose down -vpodman rm -f devcontainer 2>/dev/nullpodman-compose pullpodman-compose up -dQuesto distrugge tutti i dati nei volumi. Dovrete clonare nuovamente i repository e riconfigurare gli strumenti.