¿Tienes problemas con detener contenedores en Docker? Encontrar la manera correcta de detener un contenedor puede ser complicado, especialmente cuando se pueden crear muchos contenedores diferentes. En este artículo, aprenderás los comandos de Docker para detener un contenedor o todos los contenedores.
Sigue leyendo para obtener más información.
Prerrequisitos
Para seguir este tutorial, asegúrate de tener lo siguiente:
- Windows 10: este tutorial utiliza Windows para ejecutar Docker, pero también puedes aplicar los mismos pasos generales en Linux o macOS.
- Docker Desktop: Este tutorial utiliza la versión 3.5.2. El motor de Docker está disponible si estás en Linux, ya que la interfaz gráfica no lo incluye.
- A running Docker container or containers.
Finalización de Contenedores con el Comando docker stop
Comencemos con el primer comando: el comando docker stop
y cómo detiene los contenedores.
Por ejemplo, tal vez necesitas detener un contenedor en ejecución con el nombre mystifying_hofstadter
y un ID de fb66ed502096
. Como se muestra en el siguiente ejemplo, detén el contenedor con el comando docker stop
.

¿Qué pasa si tienes múltiples contenedores en ejecución y quieres detenerlos? El comando docker stop
admite detener múltiples IDs de contenedores, uno a la vez.
Primero, lista todos los contenedores mediante el comando docker ps
y pasa los IDs de los contenedores al comando docker stop
, como se muestra a continuación.

¿Y si deseas detener todos los contenedores en ejecución sin recuperar manualmente los IDs de los contenedores y pasarlos a docker stop
? El comando docker ps -q
logrará eso. El parámetro -q
del comando docker ps
solo muestra los IDs de los contenedores.

La construcción
$(docker ps -q)
mencionada arriba es una subexpresión tanto en Bash en Linux como en PowerShell en Windows. Una subexpresión indica al shell que procese primero un conjunto de comandos,docker ps -q
, y luego devuelva el conjunto de resultados al comando originaldocker stop
.
El comando docker stop
utiliza la señal SIGTERM para los contenedores. Las señales de Linux informan a un proceso de un evento, pero depende del proceso decidir cómo actuar ante una señal dada.
Cuando se utiliza la señal SIGTERM, Docker usa la señal para detener un proceso de manera controlada esperando por defecto 10
segundos antes de enviar la señal SIGKILL, que termina el proceso inmediatamente.
Detener un contenedor usando señales de proceso
Ha aprendido sobre el comportamiento predeterminado de Docker (señal de detención) con el comando docker stop
para contenedores al detener un contenedor. Pero es posible que no desee el comportamiento predeterminado. En su lugar, puede indicar a Docker que utilice señales de detención alternativas.
Con la bandera --stop-signal
de los comandos docker run
, puede especificar la señal de detención al iniciar el contenedor. Esta bandera establece la señal que se enviará al contenedor en ejecución cuando desee detenerlo.
En el ejemplo siguiente, la bandera --stop-signal
toma el valor SIGQUIT
, lo que le indica a Docker que envíe la señal SIGQUIT cuando sea hora de detener el contenedor. El ejemplo también utiliza los siguientes 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.- “nombre de la imagen” – Qué imagen de Docker usar para aprovisionar el contenedor, en este caso, la imagen
ubuntu
.

SIGQUIT
as the signal when starting and then stopping a Docker container. También puedes especificar la señal de parada usando un Dockerfile, que le indica a Docker cómo construir un contenedor. Puedes agregar una entrada al Dockerfile especificando la señal de parada con
STOPSIGNAL SIGQUIT
, por ejemplo. Puedes cambiarSIGQUIT
por cualquier señal de parada que desees.
Saliendo de los contenedores inmediatamente con docker kill
Habrá momentos en los que quieras salir de los contenedores sin permitirles un período de gracia. El comando docker kill
detiene inmediatamente un contenedor.
El ejemplo siguiente pasa el contenedor con ID 2aa318273db5
a docker kill
. El contenedor saldrá inmediatamente a través de la señal SIGKILL. Al contenedor no se le permitirá una salida elegante. Como resultado del comando, el contenedor saldrá y se mostrará el ID del contenedor.
Matar todos los contenedores con el comando
docker kill $(docker ps -q)
. Observa que(docker ps -q
) es una subexpresión aquí.
Deteniendo y eliminando un contenedor con docker rm
De forma predeterminada, cuando creas un contenedor, ese contenedor se construye de la misma manera que antes: es idempotente. Eliminar un contenedor tendrá un impacto mínimo, y teniendo eso en cuenta, docker rm
puede forzar detener y eliminar un contenedor. Docker emite una señal SIGKILL
al proceso principal y elimina el contenedor de la lista de contenedores disponibles en tu instalación de Docker.
Si el contenedor debe mantener los archivos internos modificados o se debe mantener su estado, entonces eliminar un contenedor destruirá esos cambios. ¡Ten cuidado con posibles desastres!
En el siguiente ejemplo, tal vez hayas iniciado un contenedor al que se le asignó el nombre kind_galileo
. Antes de eliminar un contenedor, el contenedor debe detenerse, como se muestra a continuación. El comando docker ps -a
muestra el estado de Exited
para el contenedor de ejemplo.

Ahora que el contenedor está detenido, ejecutar el comando docker rm
eliminará por completo el contenedor.
En lugar de detener el contenedor y luego eliminarlo, la combinación de --force
y docker rm
detendrá y eliminará el contenedor en una sola operación. El contenedor, laughing_elion
, ya no estará disponible para ejecutarse.
Si no especificas el comando
--force
, encontrarás el mensaje de errorError response from daemon: You cannot remove a running container...

Detener contenedores de Docker con Docker Compose
Los comandos de Docker suelen utilizarse en un solo contenedor, pero puedes crear un servicio con múltiples contenedores trabajando en conjunto. La herramienta Docker Compose te permite configurar un servicio compuesto por varios contenedores para que trabajen juntos.
Dado que los contenedores dentro de un servicio están diseñados para trabajar juntos, es mejor detener el servicio completo de manera adecuada en lugar de detener cualquier contenedor individualmente.
Si tienes un servicio en ejecución con varios contenedores, [docker-compose stop]
detiene el servicio sin eliminar los contenedores ni el servicio. Sigue los pasos a continuación para crear un servicio de Docker Compose, iniciar el servicio y, en última instancia, detener el servicio de manera adecuada.
1. Crea un directorio para almacenar tu archivo de configuración. En este ejemplo, el directorio C:\Artículos\Ubuntu almacenará el archivo.
2. A continuación, crea el archivo docker-compose.yml, que contendrá la siguiente configuración. El siguiente archivo de Docker Compose crea un servicio con dos contenedores de Ubuntu, y cuando se inician, los contenedores no salen inmediatamente.
3. En una sesión de terminal, navega hasta el directorio de tu archivo de configuración personalizado de Docker, que en este ejemplo es C:\Artículos\Ubuntu. Ejecuta el comando docker-compose up -d
para generar y arrancar el servicio creado en el paso anterior en segundo plano, como indica la opción -d
.

4. En la misma sesión de terminal y directorio, emite el comando docker-compose stop
para detener el servicio y los contenedores de manera adecuada.

El comando
docker-compose
, al igual que el comandodocker
, también tiene los parámetrosrm --force
ykill
. Los parámetros dedocker-compose
funcionan en el servicio en lugar de un solo contenedor. El comandodocker-compose kill
también admite una opción-s
para especificar la señal de detención.
Conclusión
Los contenedores de Docker son una herramienta poderosa para crear entornos únicos y segmentados para el desarrollo y el uso en producción. En este artículo, has aprendido varias formas en que Docker detiene uno o más contenedores, e incluso todos. También has aprendido sobre la señal de detención predeterminada que Docker utiliza y cómo cambiarla.
Con este conocimiento, ahora sabes cómo detener los contenedores de Docker y cómo no equivocarte al detener los contenedores en ejecución. ¿Cómo planeas detener tus contenedores a partir de ahora, teniendo este nuevo conocimiento?
Source:
https://adamtheautomator.com/docker-stop-containers/