Sobes.tech
Junior

Como aceder a um contêiner em execução criado a partir de Dockerfile?

sobes.tech IA

Resposta da IA

Existem várias formas de aceder a um contêiner em execução:

  1. docker exec: A forma mais comum e recomendada. Executa um comando num contêiner já em funcionamento.

  2. docker attach: Conecta ao STDIN, STDOUT e STDERR de um contêiner em execução. Normalmente usado para interagir com o processo principal do contêiner.

  3. Servidor SSH dentro do contêiner: Abordagem menos comum que requer adicionar um servidor SSH à imagem via Dockerfile. Nem sempre recomendado por motivos de segurança e complexidade de gestão.

  4. Ferramentas de depuração do host: Em alguns casos, pode-se usar ferramentas de monitorização e depuração do sistema host (por exemplo, nsenter) para inspecionar processos dentro do espaço de nomes do contêiner.

O método mais flexível e seguro é usar docker exec.

Exemplo de uso de docker exec para obter um shell interativo (por exemplo, bash ou sh):

# Iniciar uma shell interativa dentro do contêiner
docker exec -it <container_id_or_name> bash

# Se bash não estiver disponível, tente sh
# docker exec -it <container_id_or_name> sh

Para obter o ID ou nome do contêiner em execução:

# Mostrar a lista de contêineres em execução
docker ps

Exemplo de uso de docker attach:

# Conectar ao contêiner. Tenha cuidado,
# sair pode parar o processo principal do contêiner
docker attach <container_id_or_name>

Comparação entre docker exec e docker attach:

Funcionalidade docker exec docker attach
Executar uma nova comando Sim Não
Interagir com STDIN/STDOUT/STDERR do processo principal Não (por padrão) Sim
Sair sem parar o contêiner Sim Não (por padrão)
Múltiplas ligações Sim (cada ligação é um novo processo) Sim (todas as ligações ao mesmo processo)

No DevOps, o acesso a um contêiner é frequentemente necessário para depuração ou execução de comandos pontuais, tornando o docker exec a ferramenta preferida. Adicionar SSH dentro do contêiner viola o princípio de "um processo por contêiner" e aumenta a complexidade da imagem.