Como usar docker exec em containers ativos
Aprenda a usar docker exec para interagir com containers sem reiniciá-los.

O comando exec
do Docker permite executar comandos de shell diretamente dentro dos seus containers em execução, sem precisar reiniciá-los. Isso é útil para depurar erros, ajustar configurações ou verificar rapidamente o ambiente de um container, tornando o fluxo de trabalho mais eficiente e evitando tempos de inatividade desnecessários.
Os containers do Docker mudaram a forma como implantamos aplicativos, possibilitando implementar em múltiplas arquiteturas com uma abordagem universal. Com Docker, você pode implementar qualquer coisa, incluindo ferramentas de linha de comando, em diferentes ambientes sem se preocupar com diferenças na infraestrutura subjacente.
Introdução ao docker exec
Antes de explorar o comando, você precisará de um container em execução. Primeiro, se ainda não tiver o Docker instalado, faça o download e configure-o; você precisará dele para executar os comandos.
Depois de tudo configurado, execute este comando para executar o container Ubuntu através da imagem oficial:
docker run -d --name meu_container_ubuntu ubuntu sleep infinity
O que acontece aqui?
d
— Executa o container em segundo plano (modo desanexado)--name meu_container_ubuntu
— Atribui um nome ao container para referênciasubuntu
— Especifica a imagem do Ubuntu (Docker a baixará se não estiver disponível localmente)sleep infinity
— Mantém o container em execução indefinidamente:
Você pode verificar se o container está em execução com o comando ps
assim:
docker ps
O comando ps
lista todos os containers em execução. Se o container estiver em execução, ele deverá aparecer na lista com o nome atribuído por você.
Agora que você está configurado com o Docker e tem um container em execução, pode interagir com ele usando o comando exec
.
O comando docker exec
O Docker vem com o comando exec
, que permite executar comandos em containers em execução sem reiniciá-los. O comando exec
é útil quando você deseja iniciar um shell interativo, inspecionar logs, modificar arquivos ou realizar várias outras tarefas.
A sintaxe geral para o comando docker exec
é:
docker exec [OPÇÕES] CONTAINER COMANDO [ARG...]
Opção | Função | Descrição |
---|---|---|
-d , --detach | Executar em segundo plano | Executa o comando em modo desanexado |
--detach-keys string | Sobrepor teclas de desanexação | Define uma sequência de teclas personalizada para desanexar um container |
-e , --env list | Definir variáveis de ambiente | Passa variáveis de ambiente para o comando |
--env-file list | Carregar arquivo env | Carrega variáveis de ambiente de um arquivo especificado |
-i , --interactive | Manter entrada aberta | Mantém a entrada padrão aberta para interação |
--privileged | Conceder privilégios estendidos | Fornece permissões adicionais para executar comandos |
-t , --tty | Alocar pseudo-TTY | Fornece uma interface de shell interativa |
-u , --user string | Executar como usuário específico | Executa o comando como um usuário especificado |
-w , --workdir string | Definir diretório de trabalho | Define o diretório de trabalho dentro do container |
Você seguirá a opção especificada com o comando e os argumentos que está executando no container. Vamos executar um comando para listar todos os arquivos no diretório do container:
docker exec meu_container_ubuntu ls -l
O comando deve exibir os arquivos e diretórios em formato longo como este:
Neste caso, usei o ID do container para referenciar o container; funciona como usar o nome do container. Você pode adicionar a opção -it
para executar um shell interativo dentro do container:
docker exec -it meu_container /bin/bash
Este comando abre um shell Bash em execução no container. Agora, você pode executar comandos diretamente sem o comando exec
:
Você pode sair do modo interativo com o comando exit
que acompanha o sistema operacional. Por padrão, docker exec
executa comandos como usuário root dentro do container. Você pode especificar um usuário diferente com a opção -u
.
Primeiro, você precisa criar um novo usuário no sistema operacional do container. Execute este comando para criar um novo usuário chamado paul
:
docker exec meu_container_ubuntu useradd -m paul
Agora, você pode especificar o usuário antes dos comandos para executar comandos para um usuário:
docker exec -u paul meu_container_ubuntu whoami
Este comando deve exibir o nome de usuário do usuário assim:
Você pode passar variáveis de ambiente e ler variáveis de ambiente existentes com a opção -e
:
docker exec -e MY_VAR=Hello meu_container_ubuntu printenv MY_VAR
Executar este comando deve exibir “Hello”, já que é o valor para a variável de ambiente MY_VAR
. Provavelmente, você precisará executar comandos em modo desanexado (em segundo plano). É aí que a opção -d
é útil:
docker exec -d meu_container_ubuntu touch /tmp/detached_file
Este comando cria um arquivo vazio dentro do diretório /tmp
sem manter uma sessão interativa aberta. Você também pode definir um diretório de trabalho com a opção -w
assim:
docker exec -w /var/log meu_container_ubuntu ls
O comando define o diretório de trabalho como /var/log
antes de listar todos os arquivos no diretório de trabalho. Se estiver preso no desenvolvimento, você sempre pode usar a opção --help
para navegar por todas as opções:
Resolvendo erros do docker exec
Você pode encontrar alguns erros ao usar o comando exec
do Docker para interagir com containers em execução. Vamos ver alguns deles e como corrigi-los.
Erro “No such container”
Verifique se você está referenciando um container existente. Execute docker ps
para visualizar todos os containers em execução, copie a referência e execute o comando com a referência correta.
Erros de permissão negada
Você pode experimentar isso ao tentar executar um comando como um usuário não-root sem os privilégios necessários. Você pode executar o comando como root ou usar a opção --privileged
para permissões extras.
Erro “OCI runtime exec failed”
Neste caso, o container provavelmente não está em execução. Execute docker start
para iniciar o container, se for o caso.
Você sempre pode visitar o Fórum da Comunidade Docker se tiver erros diferentes ou se nenhuma dessas soluções funcionar para você.
docker exec
ou docker attach
?
Os comandos exec
e attach
do Docker são úteis para interagir com containers em execução, mas são construídos para propósitos diferentes.
Recurso | Docker exec | Docker attach |
---|---|---|
Inicia um novo processo dentro do container | ✅ | ❌ |
Anexa a um processo em execução existente | ❌ | ✅ |
Suporta várias sessões ao mesmo tempo | ✅ | ❌ |
Pode executar comandos interativos ou não-interativos | ✅ | ❌ |
Você usará docker exec
quando precisar executar um comando separado dentro de um container em execução e docker attach
se precisar interagir com o processo principal em execução dentro do container.
Conclusão
Neste artigo, você aprendeu a interagir com seus containers em execução usando docker exec
. O comando docker exec
permite que você execute comandos dentro de um container em execução, seja de forma interativa, com variáveis de ambiente ou como um usuário diferente, sem reiniciar o container. Você também aprendeu a resolver erros comuns e a diferença entre exec
e docker attach
, que se conecta a um processo já em execução.