Tendo problemas com o Docker para parar containers? Encontrar a maneira correta de parar um container pode ser difícil, especialmente com a capacidade de criar vários containers diferentes. Neste artigo, você aprenderá comandos Docker para parar 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 usa 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á presente.
- 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 parar um container em execução com o nome mystifying_hofstadter
e um ID de fb66ed502096
. Como mostrado no exemplo abaixo, pare o container com o comando docker stop
containers.

E se você tiver vários contêineres em execução e quiser pará-los? O comando docker stop
suporta parar vários IDs de contêineres, um de cada vez.
Primeiro, liste todos os contêineres através do 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 depois retornar o conjunto de resultados para o comando originaldocker stop
.
O comando docker stop
de contêineres utiliza o sinal SIGTERM. Sinais do Linux informam um processo de um evento, mas cabe ao processo decidir como agir em um sinal dado.
Ao usar o sinal SIGTERM, o Docker utiliza o sinal para interromper graciosamente um processo, esperando por 10
segundos antes de enviar o sinal SIGKILL, que termina 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
de contêineres, ao parar um contêiner. Mas talvez você não queira o comportamento padrão. Em vez disso, você pode instruir o Docker a usar sinais de parada alternativos.
Com a flag --stop-signal
do comando 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ê quiser pará-lo.
No exemplo abaixo, a flag --stop-signal
recebe o valor SIGQUIT
, o que diz ao Docker para enviar o sinal SIGQUIT quando é hora de parar o contêiner. O exemplo também utiliza 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 Docker para provisionar 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 trocar oSIGQUIT
por qualquer sinal de parada que desejar.
Saindo Imediatamente dos Contêineres com docker kill
Haverá momentos em que você vai querer sair dos contêineres sem permitir um período de graça. O comando docker kill
para imediatamente um contêiner.
O exemplo abaixo passa o contêiner com ID 2aa318273db5
para o docker kill
. O contêiner sairá imediatamente via o sinal SIGKILL. O contêiner não terá permissão para uma saída grácil. Como resultado do comando, o contêiner será encerrado, e o ID do contêiner será mostrado.
Matar todos os contêineres com o comando
docker kill $(docker ps -q)
. Note que(docker ps -q
) é uma sub-expressão aqui.
Parando e Removendo um Contêiner com docker rm
Por padrão, quando você cria 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 comando 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 deve manter os arquivos internos alterados ou seu estado deve ser mantido, então remover um contêiner destruirá essas alterações. Cuidado com possíveis falhas!
No exemplo a seguir, talvez você tenha iniciado um contêiner que foi designado com 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 Exited
para o contêiner de exemplo.

Agora que o contêiner está parado, emitir o comando docker rm
irá remover o contêiner completamente.
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 execução.
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
Comandos do Docker são tipicamente 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 que você configure um serviço composto por vários contêineres para trabalharem juntos.
Como os contêineres dentro de um serviço são projetados para funcionarem 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]
para 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 iniciados, os contêineres não saem imediatamente.
3. Numa sessão de terminal, navegue até o diretório do seu arquivo de configuração Docker personalizado, 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, como 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âmetrosdocker-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 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, até mesmo todos, os contêineres. Você também aprendeu sobre o sinal de parada padrão usado pelo Docker e como alterá-lo.
Com este conhecimento, você agora conhece os detalhes de parar os contêineres Docker e como não cometer erros ao parar os contêineres em execução. Como você planeja parar seus contêineres a partir de agora, tendo este conhecimento recém-adquirido?
Source:
https://adamtheautomator.com/docker-stop-containers/