Docker Detener todos los contenedores: Guía paso a paso
Aprende a detener todos los contenedores Docker en ejecución utilizando comandos sencillos. Esto te ayudará a gestionar los recursos del sistema y a agilizar tu entorno Docker.
Detener los contenedores uno a uno puede ralentizar tu flujo de trabajo de desarrollo y provocar errores cuando haces malabarismos con microservicios o aplicaciones multicontenedor.
En esta guía, te explicaré varios métodos que te ayudarán a terminar todos los contenedores en ejecución.
Al final de este tutorial, serás capaz de:
Entender cómo maneja Docker las señales y los periodos de gracia
Detén todos los contenedores utilizando técnicas CLI y filtros sencillos
Aprovecha Docker Compose y los alias personalizados para agilizar los flujos de trabajo
Comprender la Terminación de Contenedores Docker
Antes de detener contenedores en bloque, es útil entendercómo Docker orquesta los cierres bajo el capó.
Gestión de procesos basada en señales
Docker utiliza señales Unix para solicitar cierres con gracia antes de forzar la terminación. El comportamiento por defecto del comando docker stop es:
Envía SIGTERM al proceso principal del contenedor.
Espera hasta 10 segundos (configurable con -t/--time).
Envía SIGKILL si el proceso no ha salido.
SIGTERM: Pide educadamente al proceso que limpie y salga.
Periodo de carencia: Da tiempo a las aplicaciones para vaciar los registros, cerrar las conexiones o guardar el estado.
SIGKILL: Fuerza la finalización inmediata de cualquier proceso que no responda.
Mecánica de la interfaz de línea de comandos (CLI)
Por defecto, docker stop maneja un contenedor cada vez. Puedes ampliarlo para detener varios contenedores utilizando funciones del terminal.
# Stop a single container named my_containerdocker stop my_containerCon la tecnología de
Esto envía SIGTERM a my_container y espera los 10 segundos predeterminados antes de emitir SIGKILL si es necesario.
# Stop all running containers at oncedocker stop $(dockerps-q)Con la tecnología de
Aquí, docker ps -q enumera los ID de todos los contenedores en ejecución; esos ID se pasan a docker stop, que apaga los contenedores secuencialmente.
Captura de pantalla de un terminal que muestra la salida de docker ps -q canalizada a docker stop
Mata manualmente cualquier proceso hijo de dockerd si persiste.
Caso real: En un proyecto, utilicé docker kill en un contenedor de base de datos cuando se colgó una migración. La eliminación abrupta impidió que la BD vaciara los registros de transacciones, corrompiendo las tablas InnoDB. Tuvimos que restaurar a partir de copias de seguridad y repetir los binlogs, lo que costó más de 30 minutos de inactividad. Para evitarlo, prefiere docker stop con un tiempo de espera prolongado o añade en tu aplicación gestores adecuados de SIGTERM.
Errores de permiso denegado
Ejecutar comandos Docker sin los privilegios adecuados suele provocar errores:
Antepone a los comandos sudo o ejecútalos como usuario del grupo docker.
Añade tu usuario al grupo docker y vuelve a conectarte:
Después de cerrar la sesión y volver a entrar, puedes ejecutar comandos Docker sin sudo. En un entorno CI, asegúrate de que el usuario ejecutor tiene pertenencia al grupo Docker para evitar fallos en la canalización.
Consideraciones específicas de Windows
En Windows PowerShell, encierra los subcomandos entre paréntesis y ejecútalos como Administrador:
Iniciar PowerShell con derechos elevados evita problemas de cortafuegos o de control de acceso. Si ves errores de enlace TLS, comprueba que la configuración del demonio de Docker Desktop coincide con tu entorno PowerShell.
Conclusión
Detener todos tus contenedores Docker de forma eficiente ahorra tiempo, conserva recursos y minimiza los errores humanos en tu flujo de trabajo de desarrollo. Puedes mantener un entorno limpio y predecible comprendiendo la gestión de señales de Docker, aprovechando los filtros de la CLI, utilizando Docker Compose y creando alias sencillos.
Feliz contenedorización, ¡y por unos flujos de trabajo Docker limpios y eficientes!
Preguntas frecuentes
¿Qué código de salida devuelve docker stop? ⌄
Si tiene éxito, docker stop devuelve 0. Un código de salida distinto de cero indica que uno o más contenedores no se han detenido.
¿Puedo previsualizar qué contenedores se detendrán antes de ejecutar el comando? ⌄
Sí-ejecuta docker ps o docker ps -q para listar los contenedores en ejecución y verificar los IDs o nombres antes de ejecutar docker stop.
¿Cómo afectan las políticas de reinicio a los contenedores parados?⌄
Los contenedores con una política de reinicio como always se reiniciarán automáticamente después de pararse. Elimina o modifica la política con docker update --restart=no si quieres que permanezcan paradas.
¿Hay alguna forma de detener contenedores por red o volumen? ⌄
Aunque Docker no filtra directamente por red o volumen en docker stoppuedes combinar docker ps --filter "network=" o docker ps --filter "volume=" con la sustitución de comandos.
¿Cómo puedo integrar Docker Stop en una canalización CI/CD?⌄
Incorpora el comando de parada a tus scripts de construcción o trabajos de CI: utiliza indicadores como --signal y filtros para cierres selectivos, y luego sigue con comandos de limpieza (docker system prune) en la misma canalización.
¿Puedo reiniciar después todos los contenedores parados?⌄
Sí, utiliza docker start $(docker ps -a -q) para reiniciar todos los contenedores, incluidos los detenidos anteriormente.
¿Parar todos los contenedores los eliminará?⌄
No, detener los contenedores no los elimina. Permanecen en tu sistema hasta que los eliminas con docker rm.
¿Cómo puedo automatizar la parada diaria de los contenedores?⌄
Utiliza una tarea cron con el comando docker stop $(docker ps -q) para programar la parada automática.
¿Afecta la parada de Docker a los volúmenes o a las redes?⌄
No, detener un contenedor no afecta a los volúmenes o redes conectados: permanecen intactos.
¿Puedo excluir algunos contenedores para que no se detengan?⌄
Puedes detener contenedores selectivamente utilizando docker ps con filtros o excluyendo IDs de contenedores concretos del comando.
¿Qué herramientas pueden ayudar a gestionar los contenedores más allá de los comandos CLI?⌄
Herramientas como Portainer o Docker Desktop ofrecen una gestión basada en GUI, lo que facilita el control de los contenedores a los principiantes.
Aprende a instalar y configurar la base de datos MySQL dentro de contenedores Docker. El tutorial incluye conceptos como conectarse a servidores MySQL, ejecutar clientes MySQL para conectarse a contenedores, etc.
Esta guía te enseña a configurar y gestionar las Cuentas de Almacenamiento de Azure, paso a paso. También explora opciones avanzadas de configuración para un rendimiento óptimo y una optimización de costes.
Aprende a crear, conectar, gestionar, consultar y proteger tu base de datos Azure SQL. Esta guía paso a paso cubre todo lo esencial para una configuración óptima de la base de datos.
Detener los contenedores uno a uno puede ralentizar tu flujo de trabajo de desarrollo y provocar errores cuando haces malabarismos con microservicios o aplicaciones multicontenedor.
En esta guía, te explicaré varios métodos que te ayudarán a terminar todos los contenedores en ejecución.
Al final de este tutorial, serás capaz de:
Comprender la Terminación de Contenedores Docker
Antes de detener contenedores en bloque, es útil entendercómo Docker orquesta los cierres bajo el capó.
Gestión de procesos basada en señales
Docker utiliza señales Unix para solicitar cierres con gracia antes de forzar la terminación. El comportamiento por defecto del comando
docker stopes:SIGTERMal proceso principal del contenedor.-t/--time).SIGKILLsi el proceso no ha salido.Mecánica de la interfaz de línea de comandos (CLI)
Por defecto,
docker stopmaneja un contenedor cada vez. Puedes ampliarlo para detener varios contenedores utilizando funciones del terminal.Esto envía SIGTERM a
my_containery espera los 10 segundos predeterminados antes de emitir SIGKILL si es necesario.Aquí,
docker ps -qenumera los ID de todos los contenedores en ejecución; esos ID se pasan adocker stop, que apaga los contenedores secuencialmente.Captura de pantalla de un terminal que muestra la salida de
docker ps -qcanalizada adocker stopPara una comprensión más detallada de estos conceptos, considera explorar los Conceptos de Contenedorización y Virtualización.
Comparar docker stop y docker kill
Elegir entre una rescisión elegante y una contundente te ayuda a evitar consecuencias no deseadas.
Despido procedente o inmediato
Mando
Señal(es)
Comportamiento
Caso práctico
docker stop
SIGTERM → SIGKILL tras tiempo de espera
Apagado graceful con tiempo de limpieza
Mantenimiento rutinario o actualizaciones
docker kill
SIGKILL
Cese inmediato
Reparación de emergencia de contenedores colgados
Personalización de señales
Ambos comandos admiten una bandera
--signalpara anular los valores por defecto:Lo anterior permite que los procesos atrapen
SIGINTpara una limpieza personalizada.Como se ha visto anteriormente, puedes utilizar señales personalizadas cuando tu aplicación implemente ganchos de apagado específicos.
Estrategias avanzadas de parada de contenedores
Filtrar y automatizar la detención de contenedores permite flujos de trabajo DevOps más precisos, especialmente en entornos a gran escala.
Una vez que entiendas lo básico, podrás afinar qué contenedores detienes y cómo automatizas el proceso.
Terminación del contenedor filtrado
Los filtros te permiten orientar los contenedores por atributos como el nombre de la imagen, el estado o las etiquetas:
El comando anterior detiene sólo los contenedores basados en
my_image:latest, proporcionando un control específico en proyectos multiservicio.Casos prácticos:
--filter "ancestor=test:latest")--filter "label=env=dev")Captura de pantalla del terminal del uso de
docker ps --filterLimpieza automatizada con Docker Compose
Si tus servicios están definidos en un archivo
docker-compose.yml, un único comando detiene todos los contenedores relacionados:Esto respeta las dependencias de tus servicios y los tiempos de espera configurados para un apagado limpio.
Para técnicas más avanzadas, puedes considerar el curso Docker Intermedio.
Optimización del flujo de trabajo basada en alias
Para tareas repetitivas, los alias de terminal reducen el tecleo y el cambio de contexto:
Una vez que recargues tu terminal, ejecutar
dsdetiene todos los contenedores con una sola pulsación, lo que es ideal para una limpieza rápida.Usar el alias 'ds' para detener todos los contenedores en ejecución en Ubuntu WSL
Buenas prácticas operativas
Implementa rutinas de apagado seguro y limpieza periódica para mantener tu entorno estable y con buen rendimiento.
docker killpara intervenciones de emergencia; evita incoherencias en los datos.-t/--time) en función de las necesidades de limpieza de tu aplicación.docker system prune, como se detalla en Docker Prune: Una guía completa con ejemplos prácticos.Solución de problemas comunes
Incluso los comandos más sencillos pueden tener problemas: aquí te explicamos cómo resolverlos.
Procesos zombis y volúmenes huérfanos
Las terminaciones forzadas pueden dejar procesos obsoletos o volúmenes huérfanos, consumiendo recursos del host y espacio en disco. Para limpiar:
Esto borra todos los volúmenes no referenciados por ningún contenedor.
Comprueba si hay procesos demonio Docker persistentes:
Mata manualmente cualquier proceso hijo de
dockerdsi persiste.Caso real: En un proyecto, utilicé
docker killen un contenedor de base de datos cuando se colgó una migración. La eliminación abrupta impidió que la BD vaciara los registros de transacciones, corrompiendo las tablas InnoDB. Tuvimos que restaurar a partir de copias de seguridad y repetir los binlogs, lo que costó más de 30 minutos de inactividad. Para evitarlo, prefieredocker stopcon un tiempo de espera prolongado o añade en tu aplicación gestores adecuados deSIGTERM.Errores de permiso denegado
Ejecutar comandos Docker sin los privilegios adecuados suele provocar errores:
sudoo ejecútalos como usuario del grupodocker.dockery vuelve a conectarte:Después de cerrar la sesión y volver a entrar, puedes ejecutar comandos Docker sin
sudo. En un entorno CI, asegúrate de que el usuario ejecutor tiene pertenencia al grupo Docker para evitar fallos en la canalización.Consideraciones específicas de Windows
En Windows PowerShell, encierra los subcomandos entre paréntesis y ejecútalos como Administrador:
Iniciar PowerShell con derechos elevados evita problemas de cortafuegos o de control de acceso. Si ves errores de enlace TLS, comprueba que la configuración del demonio de Docker Desktop coincide con tu entorno PowerShell.
Conclusión
Detener todos tus contenedores Docker de forma eficiente ahorra tiempo, conserva recursos y minimiza los errores humanos en tu flujo de trabajo de desarrollo. Puedes mantener un entorno limpio y predecible comprendiendo la gestión de señales de Docker, aprovechando los filtros de la CLI, utilizando Docker Compose y creando alias sencillos.
Explora el programa de Contenedores y Virtualización con Docker y Kubernetes o el curso Docker Intermedio para profundizar tus conocimientos sobre contenedores.
Feliz contenedorización, ¡y por unos flujos de trabajo Docker limpios y eficientes!