Guías/Cómo detener contenedores de Docker

Cómo detener contenedores de Docker en un Mac, uno o todos

Atta 🐬

Fundador de Vitals

Publicado

Respuesta rápida

Para detener un contenedor de Docker, ejecuta docker stop seguido de su nombre o su ID; docker ps los muestra. Para detener todos los contenedores en marcha, ejecuta docker stop $(docker ps -q). En un proyecto de Compose, docker compose stop detiene sus contenedores y docker compose down además los elimina. docker stop pide al contenedor que se cierre y lo fuerza al cabo de 10 segundos. Un contenedor que vuelve tiene una política de reinicio; desactívala con docker update --restart=no. Vitals, un monitor del sistema para Mac, detiene contenedores desde la barra de menús: su lista de contenedores muestra la memoria de cada uno, y un clic lo detiene después de preguntarte.

Cómo detener contenedores de Docker desde Terminal

  1. 01 Ejecuta docker ps para ver los contenedores en marcha, con sus nombres e ID.
  2. 02 Detén uno con docker stop y su nombre, por ejemplo docker stop web-1. Puedes nombrar varios en un solo comando.
  3. 03 Detén todos los contenedores en marcha con docker stop $(docker ps -q). docker ps -q muestra solo los ID, y docker stop los recibe todos.
  4. 04 En un proyecto de Compose, ejecuta docker compose stop en su carpeta para detener sus servicios, o docker compose down para detenerlos y eliminar los contenedores y la red del proyecto. Los volúmenes se quedan, salvo que añadas -v.
  5. 05 Vuelve a ejecutar docker ps. Un contenedor que sigue en la lista aún se está cerrando, y uno que vuelve a aparecer al momento tiene una política de reinicio.

Los mismos comandos funcionan con OrbStack, Colima y Rancher Desktop cuando el comando docker apunta a ellos. Podman tiene podman stop, y podman stop -a los detiene todos.

Detener un contenedor termina sus procesos y conserva todo lo demás, sus archivos, sus ajustes y sus volúmenes, listo para docker start. Por eso es la forma segura de recuperar memoria y CPU de un contenedor que no usas. La tabla de abajo lo compara con los comandos que se suelen usar a su lado.

docker stop, kill, pause, rm y compose down

ComandoQué haceCuándo usarlo
docker stop Envía SIGTERM, y SIGKILL al cabo de 10 segundos Casi siempre: la app puede terminar de escribir y cerrar sus conexiones
docker kill Envía SIGKILL al instante Un contenedor no hace caso de docker stop
docker pause Congela los procesos, que conservan su memoria Quieres recuperar la CPU durante un rato, no la memoria
docker rm Elimina un contenedor detenido, o uno en marcha con -f Ya no lo necesitas; los volúmenes con nombre se quedan
docker compose stop Detiene los contenedores de un proyecto y los conserva Vas a volver a iniciar el mismo proyecto pronto
docker compose down Detiene y elimina los contenedores y la red Quieres empezar de cero la próxima vez; añade -v para eliminar también los volúmenes

Por qué un contenedor detenido vuelve a arrancar

Docker vuelve a iniciar los contenedores que tienen una política de reinicio. Con always, un contenedor que detuviste vuelve la próxima vez que se inicia Docker Desktop, así que los contenedores que detuviste ayer vuelven a estar en marcha tras reiniciar. Con unless-stopped, un contenedor que detuviste sigue detenido. Los archivos de Compose suelen poner restart: always en las bases de datos y las cachés.

Para ver la política de un contenedor, ejecuta docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' seguido de su nombre. Para desactivarla, ejecuta docker update --restart=no y el nombre, o cambia restart: en el archivo de Compose.

Cuando docker stop tarda 10 segundos

docker stop espera a que el proceso principal del contenedor termine tras SIGTERM. Un proceso que no hace caso de la señal, a menudo un script de shell que no la transmite, retrasa la parada los 10 segundos completos antes de que Docker lo mate. docker stop -t 2 acorta la espera. Si corriges la imagen, se detiene al instante: inicia la app con exec en el script de entrypoint, o pon init: true en el servicio en Compose.

Detener contenedores y recuperar la memoria

En un Mac, los contenedores se ejecutan dentro de una sola máquina virtual Linux. Al detenerlos se libera su memoria dentro de ella, pero la máquina virtual puede seguir reteniéndola, así que Monitor de Actividad puede seguir mostrando un Virtual Machine Service for Docker grande. Resource Saver, o cerrar Docker Desktop, se la devuelve a macOS; consulta Docker usa demasiada memoria para ver los ajustes.

Detener contenedores sin Terminal

La vista Containers de Docker Desktop tiene un botón Stop en cada contenedor y en cada proyecto de Compose. Está en la ventana de Docker Desktop, así que tienes que abrir la app para usarlo. Las apps de la barra de menús como Captain muestran los contenedores bajo un icono de la barra de menús, con un botón para iniciar y detener cada uno. Vitals hace lo mismo desde su barra de menús y añade lo que ninguna muestra: cuánta memoria y CPU usa cada contenedor, para que sepas cuál detener.

Lo que añade Vitals

Vitals detiene contenedores desde la barra de menús del Mac, con su memoria a la vista.

  • La lista Contenedores en el menú desplegable: cada contenedor en marcha con su proyecto de Compose, su imagen y una barra con su memoria
  • Coloca el puntero sobre uno y haz clic en la × que aparece. La fila te pregunta y luego lo detiene como lo hace docker stop, con 10 segundos para cerrarse
  • En la pestaña Contenedores de la ventana, selecciona varios y haz clic en ellos con la tecla Control pulsada para detenerlos juntos, o haz clic con Control en un proyecto de Compose y elige “Detener todos”
  • Memoria, CPU, red, disco y puertos publicados de cada contenedor, con Docker Desktop, OrbStack, Colima, Rancher Desktop y Podman

Conviene saberlo

  • Vitals pregunta antes de detener nada, y nunca inicia, elimina ni cambia un contenedor.
  • El motor puede volver a iniciar un contenedor con una política de reinicio. La ventana lo avisa cuando te pregunta.
  • Si el motor se niega o no responde, la fila indica que el contenedor sigue en marcha.
  • La lista Contenedores aparece mientras hay un motor en marcha.
Consigue Vitals por $9 $9 durante el lanzamiento, $29 después. Reembolso en 14 días.

Preguntas frecuentes

¿Cómo detengo todos los contenedores de Docker a la vez?

Ejecuta docker stop $(docker ps -q). Obtiene los ID de todos los contenedores en marcha y detiene cada uno. En Vitals, selecciónalos en la pestaña Contenedores y haz clic con Control para detenerlos juntos.

¿Qué diferencia hay entre docker stop y docker kill?

docker stop envía SIGTERM y espera hasta 10 segundos antes de forzar el contenedor con SIGKILL. docker kill envía SIGKILL al instante, así que la app no tiene ocasión de terminar de escribir ni de cerrar sus conexiones.

¿Qué diferencia hay entre docker compose stop y down?

docker compose stop detiene los contenedores y los conserva, listos para docker compose start. docker compose down los detiene y elimina los contenedores y la red del proyecto; los volúmenes se quedan, salvo que añadas -v.

¿Por qué mi contenedor de Docker vuelve a arrancar después de detenerlo?

Tiene la política de reinicio always, así que Docker lo vuelve a iniciar cuando se inicia Docker Desktop. Ejecuta docker update --restart=no con su nombre, o cambia restart: en el archivo de Compose.

¿Detener un contenedor borra sus datos?

No. Un contenedor detenido conserva sus archivos y sus volúmenes, y docker start lo vuelve a ejecutar. docker rm elimina el contenedor; los volúmenes con nombre se quedan hasta que los elimines.

¿Puedo detener contenedores de Docker desde la barra de menús del Mac?

Sí, con Vitals. Su menú desplegable de la barra de menús muestra los contenedores en marcha con su memoria, y un clic detiene un contenedor después de preguntarte. Funciona con Docker Desktop, OrbStack, Colima, Rancher Desktop y Podman.

En el glosario

Más guías