Deepseek ArtifactsDeepseek Artifacts
Guia de dev containers

Claude Code em um dev container: a configuração segura e reproduzível

Instale a extensão Dev Containers, mantenha o Docker rodando, adicione o feature oficial claude-code, reabra no contêiner, faça login pelo terminal e mantenha a autenticação viva entre rebuilds — cada passo verificado contra a documentação de dev containers da Anthropic.

A versão curta

  • Instale a extensão Dev Containers, deixe o Docker rodando e dê Reopen in Container em qualquer repositório com .devcontainer/ — o Claude Code e todo comando que ele executa rodam dentro do contêiner, não na sua máquina.
  • O feature oficial — "ghcr.io/anthropics/devcontainer-features/claude-code:1.0" no bloco features — instala a CLI em qualquer devcontainer; o VS Code também ganha a extensão, e ambos compartilham o mesmo ~/.claude.
  • Faça login pelo terminal do contêiner; se o callback do navegador não alcançar, cole o código no prompt. Faça a autenticação sobreviver a rebuilds com um volume em ~/.claude mais containerEnv.CLAUDE_CONFIG_DIR.
  • Um dev container substitui o ambiente (o /sandbox, em vez disso, confina comandos individuais no seu host). Eles se compõem — contêiner para o ambiente, sandbox e prompts de permissão para o comportamento.

Run Your AI Coding Agent in Dev Containers - Complete Beginner's Guide

Canal: Visual Studio Code15:39

Assistir

Step-by-Step: Run Claude Code SAFELY in a Dev Container

Canal: Fuzz Puppy6:56

Assistir

Development containers — official documentation

Documentação oficial: code.claude.com/docs

Assistir

Cada passo de configuração, nome de feature e caminho de credencial desta página foi verificado contra a documentação oficial de development containers; os vídeos acima são as fontes visuais e factuais.

As capturas de tela pertencem aos seus criadores, com links diretos para os timestamps exatos. Nenhum quadro com rosto é usado.

Rodar o Claude Code num dev container, passo a passo

Parte 1 — Pré-requisitos: VS Code encontra Docker

  1. 1

    Instale a extensão Dev Containers

    Abra a visualização de extensões no VS Code e instale o Dev Containers da Microsoft. A extensão adiciona o indicador remoto na barra de status, o comando Reopen in Container e o Remote Explorer — todo o fluxo abaixo passa por ela. Docker ainda não é necessário.

    VS Code Extensions marketplace page for the Microsoft Dev Containers extension with its Install button and 30 million installs, the extension that opens any repo in a container for Claude Code
    A extensão Dev Containers é o que adiciona o Reopen in Container ao VS Code — instale primeiro pela visualização de extensões.Ver em 2:00
  2. 2

    Instale o Docker Desktop e deixe-o ligado

    Dev containers são contêineres de verdade, então um motor de contêineres precisa estar rodando antes de qualquer coisa abrir. O Docker Desktop é a escolha usual no macOS e Windows; o Docker Engine serve no Linux. Ligue e deixe ligado — um motor parado é a causa número um de um "Opening Remote" travado na primeira tentativa.

    Docker Desktop dashboard with Containers selected in the sidebar and an empty Your running containers show up here list, confirming the Docker engine that dev containers run on is started
    O Docker Desktop só precisa estar rodando; uma lista de Containers vazia é exatamente a cara de um setup saudável pré-contêiner.Ver em 2:12
  3. 3

    Entenda o que muda para o Claude Code

    Depois do Reopen in Container, o VS Code roda seu servidor dentro do contêiner — e todo comando que o Claude Code executa também. Instalações, testes e edições de arquivo ficam dentro do contêiner, enquanto a pasta do workspace é montada de volta no seu repositório. Sua máquina só precisa de VS Code e Docker; toolchains e dependências moram na imagem, e um experimento fugaz do agente não toca em nada lá fora.

Parte 2 — Um contêiner funcionando, de ponta a ponta

  1. 4

    Abra um dev container pronto

    O caminho mais rápido para ver a maquinaria funcionar: no Remote Explorer, escolha uma amostra como o dev container de Go. O VS Code clona github.com/microsoft/vscode-remote-try-go e abre dentro de um volume de contêiner — nenhuma configuração escrita por você ainda.

    VS Code quick pick titled Select a sample repository to clone in a container volume listing C++, Go, Java, .NET and Node samples from github.com/microsoft
    O Remote Explorer traz amostras prontas — escolha uma e o VS Code clona o repositório direto para um volume de contêiner.Ver em 2:30
  2. 5

    Deixe o VS Code construir e conectar

    A primeira conexão clona o repositório, puxa a imagem do contêiner camada por camada e inicia o contêiner — a barra de status anuncia "Connecting to Dev Container". Numa conexão lenta, esta é a espera mais longa do setup; toda abertura seguinte reusa a imagem e leva segundos.

    VS Code terminal panel streaming dev container image layer downloads with a Connecting to Dev Container status while the sample repository is cloned
    A primeira build baixa a imagem do contêiner camada por camada; a barra de status acompanha a conexão ao dev container.Ver em 2:52
  3. 6

    Confirme que o terminal está dentro do contêiner

    Abra um terminal novo e imprima a versão da toolchain (go version aqui). A saída nomeia o sistema e a arquitetura do contêiner, não os do seu notebook. Este terminal é exatamente onde você abriria o claude — e tudo que ele executar fica dentro do contêiner.

    Integrated terminal inside the Go dev container with go version go1.22.12 linux/arm64 highlighted, proof the shell where you will run claude executes in the container
    go version imprime a toolchain do contêiner, não a do notebook — rode claude neste terminal e ele também fica dentro.Ver em 3:50
  4. 7

    Leia o devcontainer.json

    O arquivo .devcontainer/devcontainer.json define o ambiente inteiro: a imagem base (ou um Dockerfile), as extensões de VS Code a instalar no contêiner, portas redirecionadas, passos de postCreateCommand e o remoteUser. Para o Claude Code, é também onde entram o feature oficial e o volume de credenciais — cobertos nos passos 9 e 13.

    devcontainer.json of the Go sample showing the mcr.microsoft.com/devcontainers/go image plus customizations with VS Code settings and the code-spell-checker extension
    Tudo de que o contêiner é feito mora em .devcontainer/devcontainer.json: imagem, extensões, portas redirecionadas, comandos pós-criação.Ver em 4:40
  5. 8

    Aponte o agente para o workspace

    Anexe @workspace no painel do agente e peça uma explicação do projeto. A explicação e cada comando por trás dela executam dentro do contêiner. O Claude Code funciona do mesmo jeito depois que a CLI entra na imagem: contexto estilo @workspace mais comandos que nunca saem do contêiner.

    VS Code agent panel with the @ context picker open listing @workspace as an attachment and Claude Sonnet 4.5 selected as the model before explaining the project inside the dev container
    Pedindo ao agente para explicar o projeto via @workspace — cada comando executado roda dentro do contêiner.Ver em 5:20
  6. 9

    Troque pelo feature oficial do Claude Code

    Sem instalações manuais: adicione "ghcr.io/anthropics/devcontainer-features/claude-code:1.0" ao bloco features do devcontainer.json e reconstrua. O feature instala a CLI — e, quando o contêiner abre no VS Code, a extensão do Claude Code também, compartilhando o mesmo ~/.claude do terminal. Se a imagem base não tem Node.js, você verá "Failed to install Node.js and npm": adicione o feature do Node acima dele. Configurações de ambiente como CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC ou DISABLE_AUTOUPDATER vão em containerEnv, e mounts pode trazer seus outros repositórios locais para dentro do contêiner.

  7. 10

    Rode o app e use a porta redirecionada

    Inicie o app de dentro do contêiner (painel de debug, npm run dev, go run — o que a stack pedir) e o VS Code detecta a porta em escuta: uma notificação oferece abri-la no seu navegador local. O servidor nunca sai do contêiner; o redirecionamento só faz o localhost se comportar como sempre.

    VS Code notification reporting Your application Hello Remote World running on port 9000 is available with Open in Browser and Preview in Editor buttons after automatic port forwarding
    O app roda na porta 9000 dentro do contêiner; o VS Code a redireciona para o localhost funcionar exatamente como de costume.Ver em 6:08

Parte 3 — Seu repositório e o login

  1. 11

    Adicione um dev container ao seu projeto

    Em qualquer repositório, rode Dev Containers: Add Dev Container Configuration Files pela paleta de comandos ou pelo indicador remoto, e escolha "Add configuration to workspace folder". Commitada junto com o código, a config dá aos colegas — e aos Codespaces — o ambiente idêntico de graça.

    Add Dev Container Configuration Files quick pick asking where to create the configuration with Add configuration to workspace folder selected so teammates get it via source control
    Sem devcontainer.json ainda? O VS Code gera um a partir de um template — mantenha no workspace para o git compartilhar.Ver em 9:00
  2. 12

    Escolha o template e os features

    O VS Code sugere um template compatível com sua stack (Node.js, Python, Go…) e mostra a lista de features — instaladores reutilizáveis como Git LFS ou GitHub CLI. É nessa lista que o feature claude-code do passo 9 se encaixa. Aceite os padrões (ou peça ao agente para refinar o arquivo gerado) e reabra no contêiner.

    Select Features quick pick listing installable dev container features such as Git Large File Support and GitHub CLI where a Claude Code feature entry gets added
    A lista de features é onde uma linha de feature do Claude Code se encaixa ao lado do que o template sugere.Ver em 9:48
  3. 13

    Faça login dentro do contêiner

    Rode claude no terminal integrado e escolha seu login (assinatura Claude ou Anthropic Console). O navegador abre no seu host; se o callback não alcançar o contêiner, copie o código do navegador e cole no prompt "Paste code here if prompted". Para sobreviver a rebuilds, monte um volume em ~/.claude e aponte containerEnv.CLAUDE_CONFIG_DIR para o mesmo caminho — o arquivo de conta ~/.claude.json mora fora dessa pasta, e é por isso que as duas metades importam. Para execuções headless ou Codespaces, gere um token com claude setup-token e passe ANTHROPIC_API_KEY ou CLAUDE_CODE_OAUTH_TOKEN.

Dev container vs /sandbox: qual isolamento você precisa?

O Claude Code traz duas respostas de isolamento, e elas resolvem problemas diferentes. Um dev container substitui o ambiente em que o agente trabalha; o sandboxing embutido confina os comandos que ele roda na sua máquina atual. Os docs oficiais os posicionam como complementares — o devcontainer de referência até embute um script de restrição de egress.

  • 1Escopo. Um dev container troca o ambiente inteiro — SO, toolchain, dependências — pelo definido no devcontainer.json. O sandboxing mantém sua máquina e restringe o que cada comando bash pode ler, escrever e alcançar na rede.
  • 2Requisitos. Dev containers pedem Docker (Desktop ou Engine) mais a extensão Dev Containers; o sandboxing é embutido no Claude Code e não precisa de nenhum dos dois.
  • 3Mecânica de time. O devcontainer.json é commitado, então cada colega e cada Codespace constrói o ambiente idêntico; a política do sandbox mora nas configurações do Claude Code e segue o usuário, não o repositório.
  • 4Raio de explosão. Num contêiner, um rm -rf desastrado ou uma instalação desgovernada atinge um sistema de arquivos descartável e seu host fica intacto. O sandbox mira o mesmo resultado por comando — sem a fronteira do contêiner.
  • 5Escolha um dev container quando o próprio projeto precisa de um ambiente: múltiplos runtimes, onboarding limpo, desenvolvimento em nuvem. Escolha o sandbox como a proteção do dia a dia para sessões no seu host. Eles se compõem — rode o Claude Code dentro de um dev container e mantenha sandboxing e prompts de permissão ligados.

Mais uma linha os diferencia: o /sandbox é uma política por sessão que você ajusta no meio da conversa, enquanto um dev container é decidido antes da sessão começar — mudar significa rebuild. Execuções em lote não assistidas apoiam-se nos dois ao mesmo tempo: usuário de contêiner sem root, egress restrito e --dangerously-skip-permissions somente dentro do contêiner.

Algo fora do comportamento? Comece aqui

A maior parte do atrito de dev containers com o Claude Code cai em meia dúzia de padrões conhecidos. Cada correção abaixo vem direto da documentação oficial de development containers.

  • 1"Failed to install Node.js and npm" na instalação do feature: a imagem base não tem Node.js. Adicione o feature do Node (ghcr.io/devcontainers/features/node:1) acima do feature claude-code no bloco features e reconstrua.
  • 2O login se completa no navegador mas o contêiner segue deslogado: o callback OAuth não alcança o contêiner. Copie o código mostrado no navegador e cole no prompt "Paste code here if prompted" no terminal.
  • 3Login e configurações somem a cada rebuild: nada persiste o ~/.claude. Monte um volume nomeado nesse caminho e aponte containerEnv.CLAUDE_CONFIG_DIR para ele — inclua a variável devcontainerId no nome do volume para os projetos seguirem isolados. Nos Codespaces a pasta sobrevive a stop/start mas é limpa num rebuild completo, então forneça ANTHROPIC_API_KEY ou um CLAUDE_CODE_OAUTH_TOKEN do claude setup-token como secret.
  • 4Surpresas de versão do Claude Code: a tag claude-code:1.0 fixa o script de instalação, não a CLI — a versão mais recente é instalada e se autoatualiza dentro do contêiner. Para congelar uma versão, instale-a no Dockerfile com npm install -g @anthropic-ai/claude-code@X.Y.Z.
  • 5"Is Docker running?" ou um "Opening remote" travado: o motor não está acessível — inicie o Docker Desktop (ou o daemon) e tente de novo. Se o --dangerously-skip-permissions se recusa a iniciar, o contêiner está rodando como root; defina remoteUser como um usuário sem root, como "vscode". Organizações podem desativar o modo bypass por completo via managed-settings.json em /etc/claude-code.

Reconstruir é a retentativa universal: paleta de comandos → "Dev Containers: Rebuild Container" relê o devcontainer.json e reexecuta os features após qualquer edição. Se um rebuild se comporta diferente de um clone fresco, apague o contêiner e reabra — imagens e volumes nomeados sobrevivem à exclusão.

FAQ de dev containers

Guias relacionados do Claude Code