Introdução
Neste laboratório, você aprenderá a entrar em um contêiner Docker em execução. Essa é uma habilidade essencial de depuração, pois, embora os contêineres tenham sido projetados para serem descartáveis, muitas vezes ainda é necessário inspecionar um ambiente ativo para entender o que está acontecendo.
Para inspecionar arquivos, verificar processos em execução ou investigar problemas dentro de um contêiner, geralmente você precisa de um shell de comandos dentro do ambiente desse contêiner. O comando docker exec permite iniciar um comando adicional dentro de um contêiner que já está em execução, sem recriá-lo nem reiniciá-lo.
A palavra “adicional” é importante. docker exec não substitui o processo principal do contêiner. Ele inicia outro processo dentro dos mesmos namespaces do contêiner, enquanto o serviço original continua em execução.
Você seguirá estas etapas:
- Iniciar um contêiner Nginx em segundo plano.
- Usar
docker execpara iniciar um shell Bash interativo dentro do contêiner. - Executar comandos dentro do contêiner para identificar o sistema operacional.
- Sair do contêiner e retornar ao terminal do host.
Iniciar um contêiner em segundo plano
Nesta etapa, você iniciará um novo contêiner Docker usando a imagem Nginx. Você o executará no modo “detached”, para que ele permaneça em segundo plano, e atribuirá a ele um nome específico para facilitar sua referência posteriormente.
Execute o comando a seguir no terminal:
docker run -d --name web1 nginx
Detalhamento do comando:
docker run: comando usado para criar e iniciar um contêiner.-d: executa o contêiner no modo detached (em segundo plano).--name web1: atribui o nomeweb1ao contêiner.nginx: imagem que será usada.
Verifique se o contêiner está em execução:
docker ps
Você deverá ver web1 na lista de contêineres ativos.
O contêiner precisa estar em execução porque docker exec funciona entrando no contexto de um contêiner existente e ativo. Ele não consegue iniciar um shell dentro de um contêiner que já foi encerrado.
Entrar no contêiner
Agora que o contêiner está em execução, você usará o comando docker exec para iniciar uma sessão de shell dentro dele. Isso funciona como fazer login no contêiner, de forma semelhante a acessar um servidor remoto por SSH.
Execute o comando a seguir:
docker exec -it web1 bash
Detalhamento do comando:
docker exec: executa um comando dentro de um contêiner existente.-it: essa combinação é essencial para sessões interativas.-i(interactive): mantém o fluxo de entrada aberto.-t(tty): aloca um pseudo-terminal, fazendo com que ele se comporte como um prompt de comandos real.
web1: nome do contêiner de destino.bash: comando que será executado dentro do contêiner. Neste caso, ele inicia o shell Bash.
Assim, docker exec significa basicamente “execute este comando dentro do contêiner”. Um shell é apenas um caso de uso comum; o comando também poderia ser ls, cat ou um utilitário de depuração.
Observe a mudança:
Depois de executar esse comando, o prompt de comandos será alterado. Ele será semelhante a root@<container-id>:/#.
Isso indica que você agora está executando comandos dentro do contêiner, isolado da máquina host.
Esse isolamento normalmente inclui a visão do sistema de arquivos, o namespace de processos e o contexto de rede. Você ainda está usando o mesmo kernel, mas agora está visualizando o ambiente delimitado do contêiner, e não o ambiente completo do host.
Inspecionar o ambiente do contêiner
Agora você está dentro do contêiner. O sistema de arquivos exibido pertence ao contêiner, não ao seu ambiente LabEx. Você pode confirmar isso verificando as informações do sistema operacional.
Execute o comando a seguir dentro do shell do contêiner:
cat /etc/os-release
Você verá uma saída com a descrição da distribuição Linux usada pela imagem Nginx, geralmente Debian.
Exemplo de saída:
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
...
Isso confirma que o contêiner tem seu próprio ambiente de sistema operacional isolado, separado do host.
Mais precisamente, ele tem seu próprio sistema de arquivos de espaço de usuário e seu próprio ambiente de processos. Ele não possui um kernel separado, mas, por dentro, ainda pode parecer um pequeno sistema Linux independente.
Sair e retornar ao host
Quando terminar de depurar ou inspecionar o contêiner, você precisará sair da sessão do shell para retornar à máquina host.
Digite o comando a seguir dentro do contêiner:
exit
Depois de pressionar Enter, o prompt de comandos deverá voltar ao prompt padrão do usuário do LabEx.
O que aconteceu?
Você encerrou o processo Bash dentro do contêiner. No entanto, o próprio contêiner (web1) continua em execução em segundo plano, pois o processo principal, o Nginx, ainda está ativo.
Essa é a principal lição sobre o ciclo de vida do docker exec: encerrar o shell interativo não interrompe o contêiner, a menos que esse shell fosse o processo principal que definia a vida útil do contêiner.
Você pode confirmar isso executando:
docker ps
web1 ainda estará listado.
Para fazer a limpeza, você pode parar e remover o contêiner:
docker rm -f web1
Resumo
Neste laboratório, você aprendeu a acessar um contêiner em execução usando docker exec -it. Você praticou como:
- Iniciar um contêiner em segundo plano.
- Entrar no contêiner usando um shell Bash interativo.
- Verificar o ambiente dentro do contêiner.
- Sair com segurança mantendo o serviço em execução.
Essa é uma habilidade fundamental para trabalhar com Docker, pois permite investigar problemas em aplicações e inspecionar diretamente os ambientes dos contêineres.



