Contenido

Tutorial de docker stop, start, restart y kill: detener y reiniciar contenedores

docker stop, start, restart, kill, pause y unpause controlan el estado de ejecución de los contenedores; consulta el flujo completo en Ciclo de vida de los contenedores.

Sintaxis

docker stop [opciones] contenedor [contenedor...]
docker start [opciones] contenedor [contenedor...]
docker restart [opciones] contenedor [contenedor...]
docker kill [opciones] contenedor [contenedor...]
docker pause contenedor [contenedor...]
docker unpause contenedor [contenedor...]

Opciones

ComandoOpciónDescripción
docker stop-s, --signal stringSeñal que se envía al contenedor
docker stop-t, --timeout intSegundos que se esperan antes de forzar la finalización del contenedor
docker start-a, --attachConecta con STDOUT/STDERR del contenedor y reenvía las señales
docker start--checkpoint stringRestaura el contenedor desde el checkpoint especificado
docker start--checkpoint-dir stringUsa un directorio personalizado para almacenar checkpoints
docker start--detach-keys stringAnula la combinación de teclas para salir del modo de conexión
docker start-i, --interactiveConecta con STDIN del contenedor
docker restart-s, --signal stringSeñal que se envía al contenedor
docker restart-t, --timeout intSegundos que se esperan antes de forzar la finalización del contenedor
docker kill-s, --signal stringSeñal que se envía al contenedor

La ayuda de pause y unpause no muestra otras opciones. También puedes invocar stop, start, restart, kill y pause como subcomandos de docker container.

Ejemplos

Tiempo de espera de stop y estado de salida

$ time docker stop web
web
real	0m 0.50s
user	0m 0.00s
sys	0m 0.01s

$ time docker stop sleeper
sleeper
real	0m 10.44s
user	0m 0.01s
sys	0m 0.01s

$ docker ps -a --format 'table {{.Names}}\t{{.Status}}'
NAMES        STATUS
sleeper      Exited (137) 1 second ago
web          Exited (0) 12 seconds ago
uses-redis   Up 51 seconds
registry     Up About a minute
  • web se detuvo después de 0.50 segundos y su estado es Exited (0): nginx recibió SIGTERM y finalizó correctamente.
  • sleeper esperó 10.44 segundos y su estado es Exited (137): sleep es el PID 1 del contenedor y no gestionó SIGTERM. Docker esperó los 10 segundos predeterminados y luego envió SIGKILL (137 = 128 + 9). Consulta la explicación sobre PID 1 en Ciclo de vida de los contenedores.
  • Con -t, --timeout de docker stop --help puedes configurar cuántos segundos esperar antes de forzar la finalización del contenedor; este ejemplo muestra la diferencia entre esperar el tiempo predeterminado y forzar su finalización.
  • docker ps -a muestra los contenedores detenidos; uses-redis y registry siguen en ejecución.

start, restart y kill

$ docker start web
web

$ docker restart -t 2 web
web

$ docker kill sleeper
Error response from daemon: cannot kill container: sleeper: container ebcd31ea947204593383614f0fa2b0b9baba719e4858042e8120b3d544468f20 is not running

$ docker start sleeper && docker kill sleeper
sleeper
sleeper

$ docker ps -a --format 'table {{.Names}}\t{{.Status}}'
NAMES        STATUS
sleeper      Exited (137) Less than a second ago
web          Up 2 seconds
uses-redis   Up 54 seconds
registry     Up About a minute
  • docker start inicia el contenedor detenido web; docker restart -t 2 lo reinicia con un tiempo de espera de 2 segundos.
  • docker kill sleeper falla porque el contenedor está detenido; el error indica que no se está ejecutando. Si primero lo inicias y luego ejecutas kill, ambos comandos se completan correctamente.
  • Después de kill, sleeper aparece como Exited (137) y web como Up.

pause y unpause

$ docker pause web
web

$ docker ps --format 'table {{.Names}}\t{{.Status}}'
NAMES        STATUS
web          Up 2 seconds (Paused)
uses-redis   Up 55 seconds
registry     Up About a minute

$ docker exec web nginx -v
Error response from daemon: Container web is paused, unpause the container before exec

$ docker unpause web
web
  • docker pause pausa todos los procesos del contenedor y la columna de estado muestra (Paused).
  • Durante la pausa, docker exec falla con un mensaje que indica que primero debes ejecutar unpause; docker unpause reanuda el contenedor.

Enviar una señal para recargar nginx

$ docker kill -s HUP web
web

$ docker logs --tail 3 web
2026/10/25 15:30:32 [notice] 1#1: signal 17 (SIGCHLD) received from 22
2026/10/25 15:30:32 [notice] 1#1: worker process 22 exited with code 0
2026/10/25 15:30:32 [notice] 1#1: signal 29 (SIGIO) received

$ docker kill -s HUP web2
web2

$ docker logs web2 2>&1 | grep -E 'SIGHUP|reconfiguring'
2026/10/25 15:31:00 [notice] 1#1: signal 1 (SIGHUP) received, reconfiguring
2026/10/25 15:31:00 [notice] 1#1: reconfiguring
  • docker kill -s HUP envía la señal especificada al contenedor; aquí, el registro de web2 muestra claramente que recibió SIGHUP y está recargando la configuración.
  • docker logs --tail 3 limita la salida a las tres líneas más recientes; el otro ejemplo combina stderr con stdout y luego usa grep para filtrar el registro.

El nombre del contenedor no existe

$ docker stop nosuch
Error response from daemon: No such container: nosuch

Si el nombre del contenedor especificado no existe, Docker responde No such container.

Secciones relacionadas

Ejercicios

Ejercicio: el contenedor sleeper está detenido. Inícialo, fuérzalo a terminar inmediatamente y, por último, muestra los nombres y estados de todos los contenedores.

Respuesta
docker start sleeper && docker kill sleeper
docker ps -a --format 'table {{.Names}}\t{{.Status}}'

Preguntas frecuentes

¿Por qué docker stop sleeper tarda unos 10 segundos?

En esta ejecución, docker stop sleeper tardó 10.44 segundos y el estado posterior fue Exited (137); docker stop --help explica que -t, --timeout indica cuántos segundos esperar antes de forzar la finalización del contenedor.

¿Se puede usar docker kill con un contenedor detenido?

No. Al ejecutar docker kill sobre sleeper, que estaba detenido, Docker indicó que el contenedor no se estaba ejecutando; primero debes iniciarlo con docker start sleeper para poder usar kill.

¿Se puede usar docker exec después de pausar un contenedor?

No. En el ejemplo, docker exec web nginx -v indicó que el contenedor estaba pausado; primero debes ejecutar docker unpause web.

¿Cómo se puede recargar la configuración de nginx sin detener el contenedor?

Envía HUP al contenedor: docker kill -s HUP web2. El registro mostrará SIGHUP received, reconfiguring.

Actualizado 26 de octubre de 2026