Aller au contenu

Dépannage

”Conflict. The container name is already in use”

Section intitulée « ”Conflict. The container name is already in use” »
Fenêtre de terminal
docker rm -f devcontainer
docker compose up -d

L’image est peut-être obsolète. Récupérez la dernière version et redémarrez :

Fenêtre de terminal
docker compose pull
docker compose up -d

Le point d’entrée initialise ~/.claude.json avec les indicateurs d’intégration. S’il est manquant :

Fenêtre de terminal
echo '{"hasCompletedOnboarding": true}' > ~/.claude.json

Vérifiez quelle valeur est effectivement définie :

Fenêtre de terminal
echo "$ANTHROPIC_API_KEY"

Causes courantes :

  • Clé proxy LiteLLM manquante ou invalide — si vous utilisez le mode proxy, assurez-vous que LITELLM_API_KEY dans .env contient les identifiants proxy corrects, puis redémarrez le conteneur pour que le point d’entrée puisse dériver ANTHROPIC_API_KEY.
  • Incompatibilité entre jeton OAuth et mode proxy — utilisez exactement un seul mode d’authentification. Si CLAUDE_CODE_OAUTH_TOKEN est défini, il prend le pas sur le mode proxy LiteLLM.

Vérifiez que votre clé API est correctement définie :

Fenêtre de terminal
echo "$ANTHROPIC_API_KEY"

Vérifiez qu’elle fonctionne en effectuant un appel direct à votre fournisseur.

Le modèle est déterminé par votre fournisseur et votre clé API. Consultez la documentation de votre fournisseur pour connaître les modèles disponibles.

Le CLI gh nécessite une variable d’environnement GH_TOKEN. Ajoutez-la à votre fichier .env :

GH_TOKEN=ghp_your-token-here

Créez un jeton sur github.com/settings/tokens. Les jetons à granularité fine (recommandés) ou les jetons classiques avec le scope repo fonctionnent tous les deux. Redémarrez le conteneur après avoir mis à jour .env.

Quand GH_TOKEN est défini, le point d’entrée exécute gh auth setup-git pour configurer l’assistant d’identification git pour HTTPS. Si les opérations HTTPS échouent :

  1. Vérifiez que le jeton est valide : gh auth status
  2. Vérifiez que l’assistant d’identification est configuré : git config --global credential.helper
  3. Redémarrez le conteneur pour relancer le point d’entrée

Les deux méthodes d’authentification peuvent coexister dans le conteneur :

  • SSH (SSH_PRIVATE_KEY dans .env) — utilise les URL git@github.com:. Requis si votre organisation impose SSH.
  • HTTPS (GH_TOKEN dans .env) — utilise les URL https://github.com/. Configuration plus simple, pas de gestion de clés.

Si les deux sont configurés, git utilise le protocole correspondant à l’URL du dépôt distant. Pour basculer un clone existant :

Fenêtre de terminal
# SSH vers HTTPS
git remote set-url origin https://github.com/owner/repo.git
# HTTPS vers SSH
git remote set-url origin git@github.com:owner/repo.git
Fenêtre de terminal
sudo chown -R $(id -u):$(id -g) /workspace ~

Le point d’entrée configure automatiquement un préfixe global npm accessible en écriture à l’utilisateur dans ~/.npm-global, de sorte que les commandes npm install -g à l’exécution devraient fonctionner sans sudo. Si vous rencontrez toujours des erreurs EACCES, appliquez le correctif manuellement :

Fenêtre de terminal
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
export PATH="$HOME/.npm-global/bin:$PATH"

Le premier build télécharge l’image de base (~1 Go). Les builds suivants utilisent le cache. Si c’est lent à chaque fois :

Fenêtre de terminal
docker builder prune
Fenêtre de terminal
docker system prune -a --volumes

Attention : Cela supprime tous les conteneurs, images et volumes inutilisés — pas uniquement ceux de ce projet.

Impossible d’accéder à Internet depuis l’intérieur du conteneur

Section intitulée « Impossible d’accéder à Internet depuis l’intérieur du conteneur »
Fenêtre de terminal
ping -c 1 8.8.8.8
nslookup google.com
curl -I https://github.com

Si le DNS échoue, ajoutez dans /etc/docker/daemon.json sur l’hôte :

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

Puis redémarrez Docker.

Xvfb n’a peut-être pas démarré. Vérifiez à l’intérieur du conteneur :

Fenêtre de terminal
ps aux | grep Xvfb

S’il ne tourne pas, vérifiez que ENABLE_VNC n’est pas défini à false et redémarrez le conteneur.

Erreur “Cannot open display” ou “No display”

Section intitulée « Erreur “Cannot open display” ou “No display” »

La variable d’environnement DISPLAY n’est peut-être pas définie. Vérifiez :

Fenêtre de terminal
echo "$DISPLAY"

Elle devrait être :99. Si elle est vide, ajoutez DISPLAY=:99 à votre .env ou devcontainer.json et redémarrez.

noVNC ne tourne peut-être pas. Vérifiez à l’intérieur du conteneur :

Fenêtre de terminal
ps aux | grep -E 'novnc|websockify'

S’il ne tourne pas, vérifiez que ENABLE_VNC est à true (valeur par défaut) et consultez les journaux du conteneur :

Fenêtre de terminal
docker compose logs dev | grep -i vnc

Changez le port hôte dans docker-compose.yml :

ports:
- "127.0.0.1:16080:6080"

L’instance Chrome partagée devrait tourner sur le port 9222. Vérifiez à l’intérieur du conteneur :

Fenêtre de terminal
# Chrome tourne-t-il ?
curl http://localhost:9222/json/version
# Vérifier les journaux Chrome
cat ~/.local/share/chrome-browser/chrome.log
# Vérifier le lien symbolique
ls -la /opt/google/chrome/chrome
# Redémarrer Chrome manuellement
. /usr/local/lib/chrome-browser.sh
start_chrome_browser

Si le lien symbolique est manquant, récupérez la dernière image et redémarrez le conteneur.

Avec l’architecture de navigateur partagé, les erreurs de verrouillage de profil ne devraient pas se produire. Si vous en rencontrez une, un processus Chrome obsolète détient peut-être le verrou :

Fenêtre de terminal
# Arrêter tout processus Chrome obsolète
pkill -f 'chrome.*remote-debugging-port' || true
# Supprimer le fichier de verrouillage
rm -f ~/.cache/chrome-devtools-mcp/chrome-profile/SingletonLock
# Redémarrer Chrome
. /usr/local/lib/chrome-browser.sh
start_chrome_browser

Le serveur chrome-devtools-mcp est désormais enregistré globalement dans ~/.claude/settings.json. Si vous avez un .mcp.json par dépôt qui l’enregistre également, vous verrez des outils en double. Supprimez l’entrée chrome-devtools-mcp des fichiers .mcp.json par dépôt :

Fenêtre de terminal
# Vérifier la configuration par dépôt
cat .mcp.json

Supprimez la clé chrome-devtools-mcp de tout .mcp.json par dépôt pour utiliser l’enregistrement global.

Fenêtre de terminal
docker compose down -v
docker rm -f devcontainer 2>/dev/null
docker compose pull
docker compose up -d

Cela détruit toutes les données dans les volumes. Vous devrez re-cloner les dépôts et reconfigurer les outils.