Pular para o conteúdo

Solução de Problemas

”Conflict. The container name is already in use”

Seção intitulada “”Conflict. The container name is already in use””
Terminal window
docker rm -f devcontainer
docker compose up -d

A imagem pode estar desatualizada. Baixe a versão mais recente e reinicie:

Terminal window
docker compose pull
docker compose up -d

O entrypoint popula ~/.claude.json com flags de onboarding. Se estiver ausente:

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

Verifique qual valor está realmente definido:

Terminal window
echo "$ANTHROPIC_API_KEY"

Causas comuns:

  • Chave do proxy LiteLLM ausente ou inválida — se você está usando o modo proxy, certifique-se de que LITELLM_API_KEY no .env contém a credencial de proxy correta, depois reinicie o contêiner para que o entrypoint possa derivar ANTHROPIC_API_KEY.
  • Token OAuth ou incompatibilidade de modo proxy — use exatamente um modo de autenticação. Se CLAUDE_CODE_OAUTH_TOKEN estiver definido, ele tem precedência sobre o modo proxy LiteLLM.

Verifique se sua chave de API está configurada corretamente:

Terminal window
echo "$ANTHROPIC_API_KEY"

Confirme que funciona fazendo uma chamada direta ao seu provedor.

O modelo é determinado pelo seu provedor e chave de API. Consulte a documentação do seu provedor para ver os modelos disponíveis.

O CLI gh requer uma variável de ambiente GH_TOKEN. Adicione-a ao seu arquivo .env:

GH_TOKEN=ghp_your-token-here

Crie um token em github.com/settings/tokens. Tokens refinados (recomendado) ou tokens clássicos com escopo repo funcionam. Reinicie o contêiner após atualizar o .env.

Quando GH_TOKEN está definido, o entrypoint executa gh auth setup-git para configurar o auxiliar de credenciais do git para HTTPS. Se operações HTTPS falharem:

  1. Verifique se o token é válido: gh auth status
  2. Verifique se o auxiliar de credenciais está configurado: git config --global credential.helper
  3. Reinicie o contêiner para reexecutar o entrypoint

Ambos os métodos de autenticação podem coexistir no contêiner:

  • SSH (SSH_PRIVATE_KEY no .env) — usa URLs git@github.com:. Necessário se sua organização exige SSH.
  • HTTPS (GH_TOKEN no .env) — usa URLs https://github.com/. Configuração mais simples, sem gerenciamento de chaves.

Se ambos estiverem configurados, o git usa o protocolo que corresponde à URL do remote. Para alternar um clone existente:

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

O entrypoint configura automaticamente um prefixo global do npm gravável pelo usuário em ~/.npm-global, então comandos npm install -g em tempo de execução devem funcionar sem sudo. Se você ainda encontrar erros EACCES, aplique a correção manualmente:

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

O primeiro build baixa a imagem base (~1 GB). Builds subsequentes usam cache. Se estiver lento toda vez:

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

Aviso: Isso remove todos os contêineres, imagens e volumes não utilizados — não apenas os deste projeto.

Não é possível acessar a internet de dentro do contêiner

Seção intitulada “Não é possível acessar a internet de dentro do contêiner”
Terminal window
ping -c 1 8.8.8.8
nslookup google.com
curl -I https://github.com

Se o DNS falhar, adicione ao /etc/docker/daemon.json no host:

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

Em seguida, reinicie o Docker.

O Xvfb pode não ter iniciado. Verifique dentro do contêiner:

Terminal window
ps aux | grep Xvfb

Se não estiver em execução, verifique se ENABLE_VNC não está definido como false e reinicie o contêiner.

Erro “Cannot open display” ou “No display”

Seção intitulada “Erro “Cannot open display” ou “No display””

A variável de ambiente DISPLAY pode não estar definida. Verifique:

Terminal window
echo "$DISPLAY"

Deve ser :99. Se estiver vazia, adicione DISPLAY=:99 ao seu .env ou devcontainer.json e reinicie.

O noVNC pode não estar em execução. Verifique dentro do contêiner:

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

Se não estiver em execução, verifique se ENABLE_VNC é true (o padrão) e confira os logs do contêiner:

Terminal window
docker compose logs dev | grep -i vnc

Altere a porta do host no docker-compose.yml:

ports:
- "127.0.0.1:16080:6080"

A instância compartilhada do Chrome deve estar em execução na porta 9222. Verifique dentro do contêiner:

Terminal window
# O Chrome está em execução?
curl http://localhost:9222/json/version
# Verificar logs do Chrome
cat ~/.local/share/chrome-browser/chrome.log
# Verificar o symlink
ls -la /opt/google/chrome/chrome
# Reiniciar o Chrome manualmente
. /usr/local/lib/chrome-browser.sh
start_chrome_browser

Se o symlink estiver ausente, baixe a imagem mais recente e reinicie o contêiner.

Com a arquitetura de navegador compartilhado, erros de bloqueio de perfil não devem ocorrer. Se você encontrar um, um processo do Chrome obsoleto pode estar mantendo o bloqueio:

Terminal window
# Encerrar quaisquer processos do Chrome obsoletos
pkill -f 'chrome.*remote-debugging-port' || true
# Remover o arquivo de bloqueio
rm -f ~/.cache/chrome-devtools-mcp/chrome-profile/SingletonLock
# Reiniciar o Chrome
. /usr/local/lib/chrome-browser.sh
start_chrome_browser

O servidor chrome-devtools-mcp agora é registrado globalmente em ~/.claude/settings.json. Se você tem um .mcp.json por repositório que também o registra, verá ferramentas duplicadas. Remova a entrada chrome-devtools-mcp dos arquivos .mcp.json por repositório:

Terminal window
# Verificar configuração por repositório
cat .mcp.json

Remova a chave chrome-devtools-mcp de qualquer .mcp.json por repositório para usar o registro global.

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

Isso destrói todos os dados nos volumes. Você precisará clonar repositórios novamente e reconfigurar as ferramentas.