Entrar num contêiner que está rodando: exec, cp e o que não editar lá dentro

Node.js, Python e DockerDocker e contêineres·· 1.047 visualizações· 3 min de leitura

O contêiner está rodando e precisa de ver lá dentro: um arquivo, uma variável, rodar um comando da aplicação. A resposta curta: o docker exec abre uma linha de comandos (ou roda um comando) dentro de um contêiner que já está ligado, e o docker cp copia arquivos entre o servidor e o contêiner. Servem para olhar e diagnosticar. Não servem para manter a aplicação: o que alterar lá dentro perde-se quando o contêiner for recriado.

Os comandos que mais se usam

Para… Comando
Abrir uma linha de comandos no contêiner docker exec -it nome sh (em imagens Alpine só há o sh; em outras pode usar bash). Saia com exit.
Rodar um só comando e sair docker exec nome ls -la /app
Entrar como root, se a imagem corre com outro usuário docker exec -u root -it nome sh
Fazer o mesmo num serviço do Compose docker compose exec serviço sh (na pasta do projeto)
Copiar um arquivo do contêiner para o servidor docker cp nome:/app/registro.log ./registro.log
Copiar do servidor para o contêiner docker cp ./config.json nome:/app/config.json
Ver o consumo ao vivo docker stats (memória e processador por contêiner)
Ver os processos de um contêiner docker top nome

Diagnosticar, passo a passo

1 Confirme que está ligado: docker ps. O exec só funciona em contêineres a rodar; num que caiu, veja os registros: o que olhar quando não inicia.
2 Entre e olhe: docker exec -it nome sh
ls -la
cat /app/config.json
exit
Veja se os arquivos estão onde a aplicação espera e com os donos certos.
3 Teste a rede a partir de dentro (se a imagem trouxer as ferramentas): getent hosts db mostra se o nome de outro serviço se resolve. Imagens pequenas muitas vezes não têm curl nem ping.
4 Traga os arquivos de que precisa com o docker cp para ler à vontade no servidor, em vez de os ler à tela.
O que mudar dentro do contêiner perde-se. Se editar um arquivo com o exec e depois recriar o contêiner (docker compose up -d com uma imagem nova, por exemplo), a alteração desaparece. A correção de verdade faz-se no código ou na configuração e reconstrói-se a imagem, ou monta-se o arquivo de fora: volumes e bind mounts. Para atualizar sem perder dados: atualizar uma aplicação Docker.
Cuidado com os segredos na tela. docker exec nome env mostra todas as variáveis, incluindo senhas e chaves. Não cole essa saída num pedido de suporte nem num fórum sem apagar o que for secreto.
Quem pode usar o docker manda no servidor. Pertencer ao grupo docker equivale, na prática, a ser root. Dê esse acesso só a quem deve: as precauções com o Docker.

O contêiner corre, mas o servidor deixou de responder ou o SSH não entra? Isso é conosco: diga-nos o que vê.

Abrir um pedido de suporte

VEJA TAMBÉM

O seu primeiro contêiner, e o que ver quando não inicia

Docker: volumes ou bind mounts, onde ficam os dados e como os guardar

Atualizar uma aplicação Docker sem perder dados

PRODUTO RECOMENDADO

Servidor VPS com acesso root

Recursos só seus, o sistema que escolher, reinstalação quando quiser. desde R$ 46,20/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.