Conteúdo
Tutorial do docker exec: execute comandos em contêineres em execução
docker exec executa comandos dentro de um contêiner em execução e é mais usado para acessá-lo e investigar problemas. Veja o fluxo completo de depuração em Ver logs e depurar.
Sintaxe
docker exec [opções] contêiner comando [argumentos...]
docker exec -it web sh # acessa o shell do contêiner
docker exec web nginx -t # executa um comando e mostra o resultado
Opções
docker exec tem poucas opções. Veja todas as opções listadas por docker exec --help:
| Opção | Descrição |
|---|---|
-i, --interactive | Mantém a entrada padrão aberta para que você possa digitar |
-t, --tty | Aloca um terminal. Para interação, use junto com -i: -it |
-u, --user usuário[:grupo] | Executa como o usuário especificado (nome ou UID) |
-w, --workdir caminho | Executa no diretório especificado dentro do contêiner |
-e, --env nome=valor | Define uma variável de ambiente para esta execução |
--env-file arquivo | Lê variáveis de ambiente de um arquivo |
-d, --detach | Executa em segundo plano e retorna imediatamente |
--privileged | Concede permissões extras a este comando (para depuração; não use normalmente) |
--detach-keys | Altera o atalho para sair (padrão Ctrl+P, Ctrl+Q) |
Todos os exemplos a seguir são executados em um contêiner nginx chamado web, iniciado com a variável de ambiente APP_MODE=demo:
docker run -d --name web -e APP_MODE=demo nginx:1.30-alpine
Executar um comando
$ docker exec web nginx -v
nginx version: nginx/1.30.5
$ docker exec web sh -c "ls /etc/nginx/conf.d && echo \$APP_MODE"
default.conf
demo
- O primeiro comando executa
nginx -vno contêiner e mostra o resultado diretamente. - Para usar
&&, pipes ou variáveis, passe o comando para o shell dentro do contêiner comsh -c "...". Em\$APP_MODE,\impede que o shell do host substitua a variável primeiro.demoé o valor dentro do contêiner.
Acessar o contêiner de forma interativa
docker exec -it web sh
Depois de entrar, o prompt muda para / #. Você pode trabalhar como em um Linux comum. Digite exit para sair; o contêiner não será parado. Se a imagem tiver bash, você também pode usar bash.
-u, -w, -e
$ docker exec -u nginx web id
uid=101(nginx) gid=101(nginx) groups=101(nginx)
$ docker exec -w /usr/share/nginx/html web ls
50x.html
index.html
$ docker exec -e GREETING=hi web sh -c "echo \$GREETING"
hi
-u nginx: executa como o usuárionginx(o padrão do contêiner é root). É útil para investigar problemas de permissões de arquivos.-w /usr/share/nginx/html: executa no diretório especificado, como se você tivesse usadocdantes.-e GREETING=hi: define uma variável de ambiente apenas para esta execução, sem alterar o contêiner.
-d: executar em segundo plano
$ docker exec -d web sh -c "sleep 2; touch /tmp/done"
$ docker exec web ls /tmp
done
-d executa o comando em segundo plano e retorna imediatamente. Depois de 2 segundos, confira: /tmp/done foi criado. É útil para iniciar tarefas cujo resultado você não precisa aguardar.
O contêiner não está em execução
$ docker stop web
web
$ docker exec web ls
Error response from daemon: container 1ec4fdc5c592b09b64e8f28869c37f89ab17163f88bfcb09e82815a44b0e1164 is not running
docker exec só funciona em contêineres em execução. Para usar um contêiner parado, primeiro execute docker start. Se o contêiner sair assim que iniciar, você também não conseguirá acessá-lo com exec. Nesse caso, consulte docker logs ou inicie um novo contêiner para investigar com docker run --rm -it --entrypoint sh imagem.
Capítulos relacionados
- Ver logs e depurar
- Opções do docker run
- docker cp: copiar arquivos entre o host e o contêiner
- Mensagens de erro comuns:
executable file not found, erros de TTY
Exercícios
Exercício: com um único comando, liste os arquivos no diretório /etc/nginx do contêiner web como usuário nginx.
Resposta
docker exec -u nginx -w /etc/nginx web ls
Perguntas frequentes
Qual é a diferença entre docker exec e docker run?
docker run usa uma imagem para **criar um novo contêiner**; docker exec executa mais um processo em um **contêiner que já está em execução**. Quando exec termina, o contêiner em si não é afetado.
docker exec -it contêiner bash mostra executable file not found?
O contêiner não tem bash. Por exemplo, imagens baseadas em Alpine têm apenas sh. Use docker exec -it contêiner sh.
Os arquivos alterados dentro do contêiner continuam lá depois que ele é recriado?
Não. As alterações feitas com exec ficam na camada gravável do contêiner e desaparecem quando ele é removido. Grave as alterações que precisam ser preservadas no Dockerfile ou em um Volume.
Atualizado 14 de outubro de 2026