ANÚNCIO

~/questoes/devops

Como executar um comando dentro de um container já em execução no Compose?

Responda, confira o feedback e use o resultado para orientar sua revisão.
Aula de referência #08 – O que é́ o Docker Compose e como utilizá-lo? | Thi Code
Para fixar

Executando Comandos em Containers Ativos com Docker Compose

Conceito central

O comando docker-compose exec permite rodar comandos específicos dentro de um container que já está em execução, sem precisar parar ou reiniciar o serviço. Essa funcionalidade é essencial para debugging, manutenção e operações pontuais em ambientes com múltiplos containers.

Por que essa resposta faz sentido

O docker-compose exec é a ferramenta correta porque executa comandos diretamente no container ativo, mantendo todos os outros serviços funcionando normalmente. Você consegue rodar operações isoladas como consultas ao banco de dados, limpeza de cache ou instalação de pacotes sem interromper a aplicação.

Armadilhas comuns

  • Confundir exec com attach: muitos desenvolvedores tentam usar attach achando que conseguem executar novos comandos, quando na verdade só conseguem visualizar a saída.
  • Esquecer de usar as flags -it quando quer um terminal interativo: sem elas, o comando executa mas você não consegue interagir com o terminal do container.
  • Tentar usar docker-compose exec em um container que não está rodando: o comando só funciona com containers ativos, iniciados com docker-compose up.

Entenda as alternativas

A

docker-compose exec é o comando correto. Ele executa comandos específicos dentro de um container já em execução, permitindo operações de manutenção e debugging sem parar os demais serviços da aplicação.

B

docker-compose shell não é um comando válido do Docker Compose. Para abrir um terminal interativo, você usa docker-compose exec com a opção -it, por exemplo: docker-compose exec -it meu_servico bash.

C

docker-compose attach se conecta ao processo principal do container, mostrando apenas sua saída padrão. Diferente do exec, você não consegue enviar novos comandos, apenas visualizar o que o processo está fazendo.

D

docker-compose run inicia um novo container para executar o comando, não usa um que já está em execução. Isso é útil para testes isolados, mas não resolve o problema de trabalhar com containers já ativos.

Dica prática: Use docker-compose exec -it seu_servico bash para abrir um terminal interativo dentro do container, ou docker-compose exec seu_servico seu_comando para executar comandos específicos em background. A flag -i mantém o stdin aberto e -t aloca um pseudo-terminal.

Revise pensando: Se você precisa executar uma migração de banco de dados dentro de um container PostgreSQL que já está rodando, qual comando você usaria e por que docker-compose exec é melhor que docker-compose run?