Guias/Como parar contêineres do Docker

Como parar contêineres do Docker no Mac, um ou todos

Atta 🐬

Fundador do Vitals

Publicado em

Resposta rápida

Para parar um contêiner do Docker, execute docker stop seguido do nome ou do ID dele; docker ps lista todos. Para parar todos os contêineres em execução, execute docker stop $(docker ps -q). Em um projeto Compose, docker compose stop para os contêineres dele e docker compose down também os remove. O docker stop pede para o contêiner desligar e o força depois de 10 segundos. Um contêiner que volta tem uma política de reinício; desative-a com docker update --restart=no. O Vitals, um monitor de sistema para Mac, pode parar contêineres pela barra de menus: a lista Contêineres mostra a memória de cada um, e um clique o para depois de perguntar.

Como parar contêineres do Docker pelo Terminal

  1. 01 Execute docker ps para listar os contêineres em execução, com nomes e IDs.
  2. 02 Pare um com docker stop e o nome dele, por exemplo docker stop web-1. Você pode citar vários em um só comando.
  3. 03 Pare todos os contêineres em execução com docker stop $(docker ps -q). docker ps -q mostra só os IDs, e o docker stop recebe todos eles.
  4. 04 Para um projeto Compose, execute docker compose stop na pasta dele para parar os serviços, ou docker compose down para pará-los e remover os contêineres e a rede do projeto. Os volumes ficam, a menos que você adicione -v.
  5. 05 Execute docker ps de novo. Um contêiner que ainda aparece ainda está desligando, e um que volta logo depois tem uma política de reinício.

Os mesmos comandos funcionam com OrbStack, Colima e Rancher Desktop quando o comando docker aponta para eles. O Podman tem podman stop, e podman stop -a para todos.

Parar um contêiner encerra os processos dele e mantém todo o resto, os arquivos, os ajustes e os volumes, pronto para o docker start. Por isso é o jeito seguro de recuperar a memória e a CPU de um contêiner que você não está usando. A tabela abaixo o compara com os comandos que as pessoas costumam usar no lugar dele.

docker stop, kill, pause, rm e compose down

ComandoO que fazQuando usar
docker stop Envia SIGTERM e depois SIGKILL após 10 segundos Quase sempre: o app consegue terminar de gravar e fechar as conexões
docker kill Envia SIGKILL na hora Um contêiner ignora o docker stop
docker pause Congela os processos, que mantêm a memória Você quer a CPU de volta por um tempo, não a memória
docker rm Remove um contêiner parado, ou um em execução com -f Você terminou de usá-lo; os volumes nomeados ficam
docker compose stop Para os contêineres de um projeto e os mantém Você vai iniciar o mesmo projeto de novo em breve
docker compose down Para e remove os contêineres e a rede Você quer começar do zero da próxima vez; adicione -v para remover os volumes também

Por que um contêiner parado volta a iniciar

Um contêiner com política de reinício é iniciado de novo pelo Docker. Com always, um contêiner que você parou volta na próxima vez que o Docker Desktop inicia, então contêineres que você parou ontem estão rodando de novo depois de um reinício. Com unless-stopped, um contêiner que você parou continua parado. Arquivos Compose muitas vezes definem restart: always em bancos de dados e caches.

Para ver a política de um contêiner, execute docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' seguido do nome dele. Para desativá-la, execute docker update --restart=no e o nome, ou altere a linha restart: do arquivo Compose.

Quando o docker stop leva 10 segundos

O docker stop espera o processo principal do contêiner sair depois do SIGTERM. Um processo que ignora o sinal, muitas vezes um script de shell que não o repassa, segura a parada pelos 10 segundos inteiros até o Docker matá-lo. docker stop -t 2 encurta a espera. Corrigir a imagem faz o contêiner parar na hora: inicie o app com exec no script de entrypoint, ou defina init: true no serviço no Compose.

Parar contêineres e recuperar a memória

No Mac, os contêineres rodam dentro de uma única máquina virtual Linux. Pará-los libera a memória deles lá dentro, mas a máquina virtual pode continuar segurando essa memória, então o Monitor de Atividade ainda pode mostrar um Virtual Machine Service for Docker grande. O Resource Saver, ou encerrar o Docker Desktop, devolve a memória ao macOS; veja Docker usando memória demais para os ajustes.

Parar contêineres sem o Terminal

A visualização Containers do Docker Desktop tem um botão Stop em cada contêiner e em cada projeto Compose. Ela fica na janela do Docker Desktop, então você precisa abrir o app para usá-la. Apps de barra de menus como o Captain listam os contêineres sob um ícone na barra de menus, com iniciar e parar para cada um. O Vitals faz o mesmo pela barra de menus dele e acrescenta o que nenhum deles mostra: quanta memória e CPU cada contêiner está usando, para você saber qual parar.

O que o Vitals acrescenta

O Vitals pode parar contêineres pela barra de menus do Mac, com a memória deles à vista.

  • A lista Contêineres no menu suspenso: cada contêiner em execução com o projeto Compose, a imagem e uma barra para a memória
  • Aponte para um e clique no × que aparece. A linha pergunta e depois o para do mesmo jeito que o docker stop, com 10 segundos para desligar
  • Na aba Contêineres da janela, selecione vários e clique com a tecla Control pressionada para pará-los juntos, ou clique com a tecla Control pressionada em um projeto Compose e escolha Parar Todos
  • Memória, CPU, rede, disco e portas publicadas de cada contêiner, com Docker Desktop, OrbStack, Colima, Rancher Desktop e Podman

Bom saber

  • O Vitals pergunta antes de parar qualquer coisa e nunca inicia, remove ou altera um contêiner.
  • Um contêiner com política de reinício pode ser iniciado de novo pelo motor. A janela avisa isso quando pergunta.
  • Se o motor recusar ou não responder, a linha avisa que o contêiner continua em execução.
  • A lista Contêineres aparece enquanto um motor estiver em execução.
Comprar o Vitals por $9 $9 durante o lançamento, $29 depois. Reembolso em até 14 dias.

Perguntas frequentes

Como parar todos os contêineres do Docker de uma vez?

Execute docker stop $(docker ps -q). Ele lista os IDs de todos os contêineres em execução e para cada um. No Vitals, selecione-os na aba Contêineres e clique com a tecla Control pressionada para pará-los juntos.

Qual a diferença entre docker stop e docker kill?

O docker stop envia SIGTERM e espera até 10 segundos antes de forçar o contêiner com SIGKILL. O docker kill envia SIGKILL na hora, então o app não tem chance de terminar de gravar nem de fechar as conexões.

Qual a diferença entre docker compose stop e down?

O docker compose stop para os contêineres e os mantém, prontos para o docker compose start. O docker compose down os para e remove os contêineres e a rede do projeto; os volumes ficam, a menos que você adicione -v.

Por que meu contêiner do Docker volta a iniciar depois que o paro?

Ele tem a política de reinício always, então o Docker o inicia de novo quando o Docker Desktop inicia. Execute docker update --restart=no com o nome dele, ou altere a linha restart: do arquivo Compose.

Parar um contêiner apaga os dados dele?

Não. Um contêiner parado mantém os arquivos e os volumes, e docker start o executa de novo. docker rm remove o contêiner; os volumes nomeados ficam até você removê-los.

Dá para parar contêineres do Docker pela barra de menus do Mac?

Sim, com o Vitals. O menu suspenso da barra de menus lista os contêineres em execução com a memória de cada um, e basta um clique para parar um contêiner, depois de perguntar. Funciona com Docker Desktop, OrbStack, Colima, Rancher Desktop e Podman.

No glossário

Mais guias