Tendo problemas com o Docker para parar containers? Encontrar a maneira correta de interromper um container pode ser desafiador, dada a capacidade de criar vários containers diferentes. Neste artigo, você aprenderá os comandos do Docker para interromper um container ou todos os containers.
Continue lendo para saber mais!
Pré-requisitos
Para acompanhar este tutorial, certifique-se de ter o seguinte:
- Windows 10 – O tutorial utiliza o Windows para executar o Docker, mas você também pode aplicar as mesmas etapas gerais no Linux ou macOS.
- Docker Desktop – Este tutorial utiliza a versão 3.5.2. O motor Docker está disponível se você estiver no Linux, já que a interface gráfica não está.
- A running Docker container or containers.
Encerrando Containers com o Comando docker stop Containers
Vamos começar com o primeiro comando: o comando docker stop
containers e como ele interrompe os containers.
Por exemplo, talvez você precise interromper um container em execução com o nome mystifying_hofstadter
e um ID de fb66ed502096
. Conforme mostrado no exemplo abaixo, interrompa o container com o comando docker stop
containers.

E se você tiver vários contêineres em execução e gostaria de pará-los? O comando docker stop
suporta parar múltiplos IDs de contêiner, um de cada vez.
Primeiro, liste todos os contêineres via o comando docker ps
e passe os IDs dos contêineres para o comando docker stop
, como mostrado abaixo.

E se você deseja parar todos os contêineres em execução sem recuperar os IDs dos contêineres manualmente e passá-los para o docker stop
? O comando docker ps -q
fará isso. O parâmetro -q
do comando docker ps
produz apenas os IDs dos contêineres.

O construto
$(docker ps -q)
acima é uma subexpressão tanto no Bash no Linux quanto no PowerShell no Windows. Uma subexpressão instrui o shell a processar um conjunto de comandos,docker ps -q
, primeiro e então retornar o conjunto de resultados para o comando originaldocker stop
.
O comando docker stop
containers usa o sinal SIGTERM. Os sinais do Linux informam um processo de um evento, mas cabe ao processo decidir como agir com base em um sinal dado.
Ao usar o sinal SIGTERM, o Docker utiliza o sinal para parar um processo de forma graciosa, aguardando 10
segundos padrão antes de enviar o sinal SIGKILL, que encerra o processo imediatamente.
Parando um Contêiner Usando Sinais de Processo
Você aprendeu sobre o comportamento padrão do Docker (sinal de parada), com o comando docker stop
containers, ao parar um contêiner. Mas você pode não querer o comportamento padrão. Em vez disso, você pode instruir o Docker a usar sinais de parada alternativos.
Com a flag --stop-signal
dos comandos docker run
, você pode especificar o sinal de parada ao iniciar o contêiner. Essa flag define o sinal que será enviado ao contêiner em execução quando você deseja pará-lo.
No exemplo abaixo, a bandeira --stop-signal
recebe o valor SIGQUIT
, o que diz ao Docker para enviar o sinal SIGQUIT quando for hora de parar o contêiner. O exemplo também usa os seguintes parâmetros:
d
– Runs the container in detached (background) mode. The detached mode will not allow the container to be immediately interacted with by the user since the process is running in the background.t
– allocates a Pseudo-TTY (PTY) console, which emulates a real terminal console in the container and stops the Ubuntu container from immediately exiting. The Ubuntu container in the example requires a PTY console to stay active in the background.- “nome da imagem” – Qual imagem do Docker usar para criar o contêiner, neste caso, a imagem
ubuntu
.

SIGQUIT
as the signal when starting and then stopping a Docker container. Você também pode especificar o sinal de parada usando um Dockerfile, que diz ao Docker como construir um contêiner. Você pode adicionar uma entrada ao Dockerfile especificando o sinal de parada com
STOPSIGNAL SIGQUIT
, por exemplo. Você pode substituir oSIGQUIT
por qualquer sinal de parada desejado.
Saindo dos Contêineres Imediatamente com docker kill
Haverá momentos em que você desejará sair dos contêineres sem permitir-lhes um período de graça. O comando docker kill
interrompe imediatamente um contêiner.
O exemplo abaixo passa o contêiner com ID 2aa318273db5
para o docker kill
. O contêiner sairá imediatamente via sinal SIGKILL. O contêiner não terá permissão para sair graciosamente. Como resultado do comando, o contêiner sairá e o ID do contêiner será mostrado.
Interromper todos os contêineres com o comando
docker kill $(docker ps -q)
. Observe que(docker ps -q
) é uma sub-expressão aqui.
Parando e Removendo um Contêiner com docker rm
Por padrão, ao criar um contêiner, esse contêiner é construído da mesma forma que antes: é idempotente. Remover um contêiner terá um impacto mínimo, e com isso em mente, o docker rm
pode forçar a parada e remover um contêiner. O Docker emite um sinal SIGKILL
para o processo principal e remove o contêiner da lista de contêineres disponíveis na sua instalação do Docker.
Se o contêiner precisar manter os arquivos internos modificados ou seu estado precisar ser mantido, então remover um contêiner destruirá essas alterações. Cuidado com possíveis problemas!
No exemplo a seguir, talvez você tenha iniciado um contêiner que foi atribuído o nome kind_galileo
. Antes de remover um contêiner, o contêiner deve ser parado, como mostrado abaixo. O comando docker ps -a
está exibindo o status de Exited
para o contêiner de exemplo.

Agora que o contêiner está parado, emitindo o comando docker rm
removerá completamente o contêiner.
Em vez de parar o contêiner para então removê-lo, a combinação de --force
e docker rm
irá parar e remover o contêiner em uma única operação. O contêiner, laughing_elion
, não estará mais disponível para ser executado.
Se você não especificar o comando
--force
, você encontrará a mensagem de erroResposta de erro do daemon: Você não pode remover um contêiner em execução...

Parando Contêineres Docker com Docker Compose
Os comandos do Docker geralmente são usados em um único contêiner, mas você pode criar um serviço com vários contêineres trabalhando em conjunto. A ferramenta Docker Compose permite configurar um serviço composto por vários contêineres para trabalhar juntos.
Como os contêineres dentro de um serviço são projetados para trabalhar juntos, é melhor parar o próprio serviço inteiro de forma graciosa em vez de qualquer contêiner individual.
Se você tiver um serviço em execução com vários contêineres, [docker-compose stop]
interrompe o serviço sem remover os contêineres ou o serviço. Siga abaixo para criar um serviço Docker Compose, iniciar o serviço e, por fim, parar o serviço de forma graciosa.
1. Crie um diretório para armazenar seu arquivo de configuração. Neste exemplo, o diretório C:\Artigos\Ubuntu irá armazenar o arquivo.
2. Em seguida, crie o arquivo docker-compose.yml, contendo a seguinte configuração. O arquivo Docker Compose abaixo cria um serviço com dois contêineres Ubuntu e, quando iniciado, os contêineres não saem imediatamente.
3. Em uma sessão de terminal, navegue até o diretório do seu arquivo de configuração personalizado do Docker, que neste exemplo é C:\Artigos\Ubuntu. Execute o comando docker-compose up -d
para gerar e iniciar o serviço criado no passo anterior em segundo plano, conforme indicado pela opção -d
.

4. Na mesma sessão de terminal e diretório, emita o comando docker-compose stop
para encerrar o serviço e os contêineres de forma adequada.

O comando
docker-compose
, assim como o comandodocker
, também possui os parâmetrosrm --force
ekill
. Os parâmetros dodocker-compose
funcionam no serviço em vez de em um único contêiner. O comandodocker-compose kill
também aceita uma opção-s
para especificar o sinal de parada.
Conclusão
Os contêineres do Docker são uma ferramenta poderosa para criar ambientes únicos e segmentados para uso no desenvolvimento e produção. Neste artigo, você aprendeu várias maneiras de o Docker parar um ou mais contêineres, até mesmo todos. Você também aprendeu sobre o sinal de parada padrão usado pelo Docker e como alterá-lo.
Com esse conhecimento, agora você conhece os detalhes de como parar os contêineres do Docker e como não cometer erros ao interromper os contêineres em execução. Como você planeja parar seus contêineres a partir de agora, tendo esse conhecimento recém-adquirido?
Source:
https://adamtheautomator.com/docker-stop-containers/