Cómo usar el comando docker container start para reiniciar contenedores

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a utilizar el comando docker container start para reiniciar contenedores detenidos. Comenzarás creando y deteniendo contenedores utilizando las imágenes hello-world y ubuntu.

Posteriormente, explorarás diferentes formas de iniciar un contenedor detenido, incluyendo simplemente iniciarlo, iniciarlo y conectarte a su salida, e iniciarlo de manera interactiva. Esto demostrará la flexibilidad del comando docker container start para gestionar el ciclo de vida de los contenedores.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/attach("Attach to Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555122{{"Cómo usar el comando docker container start para reiniciar contenedores"}} docker/ps -.-> lab-555122{{"Cómo usar el comando docker container start para reiniciar contenedores"}} docker/start -.-> lab-555122{{"Cómo usar el comando docker container start para reiniciar contenedores"}} docker/stop -.-> lab-555122{{"Cómo usar el comando docker container start para reiniciar contenedores"}} docker/attach -.-> lab-555122{{"Cómo usar el comando docker container start para reiniciar contenedores"}} docker/pull -.-> lab-555122{{"Cómo usar el comando docker container start para reiniciar contenedores"}} end

Crear y detener un contenedor

En este paso, aprenderás cómo crear y detener un contenedor de Docker. Un contenedor es una instancia ejecutable de una imagen. Puedes crear, iniciar, detener, mover o eliminar un contenedor utilizando la API o CLI de Docker.

Primero, descarguemos la imagen hello-world desde Docker Hub. Esta es una imagen muy pequeña útil para pruebas.

docker pull hello-world

Deberías ver una salida que indica que la imagen se está descargando y extrayendo.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Ahora, creemos y ejecutemos un contenedor a partir de la imagen hello-world. Cuando ejecutes este comando, Docker creará un nuevo contenedor y ejecutará el comando especificado en la imagen. En el caso de hello-world, el comando simplemente imprime un mensaje y luego finaliza.

docker run hello-world

Deberías ver una salida similar a esta:

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Esta salida confirma que el contenedor se ejecutó correctamente e imprimió su mensaje. Como el comando dentro del contenedor finalizó, el contenedor se detuvo.

Para ver los contenedores en tu sistema, incluyendo aquellos que están detenidos, puedes usar el comando docker ps -a.

docker ps -a

Verás una lista de contenedores. El contenedor hello-world debería aparecer en la lista, y su estado debería ser Exited.

CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                      PORTS    NAMES
...            hello-world   "/hello"   About a minute ago   Exited (0) 58 seconds ago            ...

Ahora, creemos otro contenedor, pero esta vez usaremos la imagen ubuntu y ejecutaremos un comando que mantendrá el contenedor en ejecución por un breve período. Usaremos el comando sleep para mantener el contenedor activo durante 10 segundos.

Primero, descarga la imagen ubuntu:

docker pull ubuntu

Deberías ver una salida que indica que la imagen se está descargando.

Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Ahora, ejecuta un contenedor a partir de la imagen ubuntu y ejecuta el comando sleep 10. Lo ejecutaremos en modo desacoplado (-d) para que el contenedor se ejecute en segundo plano y no bloquee nuestra terminal.

docker run -d ubuntu sleep 10

Este comando mostrará el ID del contenedor.

[container_id]

Usa docker ps para ver los contenedores en ejecución.

docker ps

Deberías ver el contenedor ubuntu listado con un estado Up.

CONTAINER ID   IMAGE    COMMAND       CREATED         STATUS         PORTS    NAMES
[container_id]   ubuntu   "sleep 10"   About a minute ago   Up 5 seconds            ...

Después de aproximadamente 10 segundos, el comando sleep 10 finalizará y el contenedor se detendrá. Usa docker ps -a nuevamente para ver todos los contenedores, incluyendo el detenido.

docker ps -a

El contenedor ubuntu ahora debería tener un estado Exited.

CONTAINER ID   IMAGE    COMMAND       CREATED         STATUS                      PORTS    NAMES
[container_id]   ubuntu   "sleep 10"   About a minute ago   Exited (0) 5 seconds ago             ...
...

Finalmente, detengamos manualmente el contenedor ubuntu usando el comando docker stop. Puedes detener un contenedor en ejecución por su ID o nombre. Usaremos el ID del contenedor que se mostró cuando ejecutamos el contenedor. Reemplaza [container_id] con el ID real de tu contenedor ubuntu.

docker stop [container_id]

Este comando mostrará el ID del contenedor que se detuvo.

[container_id]

Usa docker ps nuevamente para confirmar que el contenedor ya no está en ejecución.

docker ps

El contenedor ubuntu no debería aparecer en la lista de contenedores en ejecución.

Iniciar un contenedor detenido

En el paso anterior, creamos y detuvimos un contenedor basado en la imagen ubuntu. En este paso, aprenderás cómo iniciar un contenedor detenido.

Primero, listemos todos los contenedores, incluyendo los detenidos, para encontrar el ID del contenedor ubuntu que creamos.

docker ps -a

Busca el contenedor con la imagen ubuntu y estado Exited. Anota su CONTAINER ID.

CONTAINER ID   IMAGE    COMMAND       CREATED          STATUS                      PORTS    NAMES
[container_id]   ubuntu   "sleep 10"   About 5 minutes ago   Exited (0) 4 minutes ago             ...
...

Ahora, podemos iniciar este contenedor detenido usando el comando docker start seguido del ID del contenedor. Reemplaza [container_id] con el ID real de tu contenedor ubuntu.

docker start [container_id]

Este comando mostrará el ID del contenedor que se inició.

[container_id]

Usa docker ps para verificar que el contenedor ahora está en ejecución.

docker ps

Deberías ver el contenedor ubuntu listado con un estado Up.

CONTAINER ID   IMAGE    COMMAND       CREATED          STATUS         PORTS    NAMES
[container_id]   ubuntu   "sleep 10"   About 5 minutes ago   Up 5 seconds            ...

Dado que el comando original para este contenedor era sleep 10, el contenedor se ejecutará durante 10 segundos y luego se detendrá nuevamente. Después de unos segundos, ejecuta docker ps -a nuevamente para ver su estado.

docker ps -a

El contenedor ubuntu debería estar nuevamente en estado Exited.

CONTAINER ID   IMAGE    COMMAND       CREATED          STATUS                       PORTS    NAMES
[container_id]   ubuntu   "sleep 10"   About 5 minutes ago   Exited (0) 5 seconds ago              ...
...

Iniciar un contenedor detenido es útil cuando deseas reanudar el trabajo o el estado de una instancia de contenedor anterior sin tener que crear una nueva.

Iniciar el contenedor y conectarse a su salida

En los pasos anteriores, creamos e iniciamos contenedores. Cuando usamos docker run o docker start en modo desacoplado (-d), el contenedor se ejecutaba en segundo plano. A veces, es necesario ver la salida de un contenedor mientras se ejecuta. En este paso, aprenderás cómo iniciar un contenedor y conectarte a sus flujos de salida estándar y error estándar.

Primero, creemos un nuevo contenedor que imprimirá un mensaje cada segundo durante 5 segundos. Usaremos nuevamente la imagen ubuntu.

docker run -d ubuntu /bin/bash -c 'for i in {1..5}; do echo "Hello from container $i"; sleep 1; done'

Este comando crea y ejecuta un contenedor en modo desacoplado (-d). El comando ejecutado dentro del contenedor es un script bash que hace un bucle 5 veces, imprimiendo un mensaje y esperando 1 segundo en cada iteración. Anota el ID del contenedor que se muestra.

[container_id]

Ahora, conectémonos a este contenedor en ejecución para ver su salida. Usa el comando docker attach seguido del ID del contenedor. Reemplaza [container_id] con el ID real de tu contenedor ubuntu.

docker attach [container_id]

Deberías ver la salida del contenedor apareciendo en tu terminal:

Hello from container 1
Hello from container 2
Hello from container 3
Hello from container 4
Hello from container 5

Cuando el bucle termine, el contenedor se detendrá y volverás al prompt de tu terminal.

Si intentas conectarte a un contenedor que ya está detenido, el comando docker attach finalizará inmediatamente.

Verifiquemos que el contenedor se ha detenido listando todos los contenedores:

docker ps -a

Deberías ver el contenedor con el comando /bin/bash -c 'for i in {1..5}; do echo "Hello from container $i"; sleep 1; done' en estado Exited.

CONTAINER ID   IMAGE    COMMAND                  CREATED         STATUS                      PORTS    NAMES
[container_id]   ubuntu   "/bin/bash -c 'for i…"   About a minute ago   Exited (0) 5 seconds ago             ...
...

Conectarse a un contenedor es útil para monitorear la salida de un proceso de larga duración o con fines de depuración.

Iniciar el contenedor de forma interactiva

En los pasos anteriores, ejecutamos contenedores que realizaban un comando y luego finalizaban, o se ejecutaban en segundo plano. A menudo, es necesario interactuar con un contenedor, como lo harías con una máquina virtual o un servidor remoto. En este paso, aprenderás cómo iniciar un contenedor de forma interactiva y obtener un prompt de shell dentro de él.

Para ejecutar un contenedor interactivamente, usamos el comando docker run con los flags -i y -t:

  • El flag -i mantiene la entrada estándar (STDIN) abierta, incluso si no está conectada. Esto es necesario para procesos interactivos.
  • El flag -t asigna un pseudo-TTY, requerido para un prompt de shell.

Ejecutaremos un contenedor ubuntu y lanzaremos el comando /bin/bash para obtener una shell bash dentro del contenedor:

docker run -it ubuntu /bin/bash

Después de ejecutar este comando, verás un prompt de shell similar a este:

root@[container_id]:/#

Esto indica que ahora estás dentro del contenedor ubuntu en ejecución como usuario root. Puedes ejecutar comandos estándar de Linux dentro de este contenedor. Por ejemplo, verifiquemos la versión del sistema operativo:

cat /etc/os-release

Deberías ver una salida similar a esta, confirmando que estás dentro de un contenedor Ubuntu:

NAME="Ubuntu"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 22.04.3 LTS"
VERSION_ID="22.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=jammy
UBUNTU_CODENAME=jammy

También puedes probar otros comandos, como listar archivos en el directorio actual:

ls

Verás los contenidos estándar del directorio raíz de un sistema Ubuntu.

Para salir del contenedor y volver a tu terminal host, puedes escribir exit en el prompt del contenedor:

exit

Cuando sales de la shell, el contenedor se detendrá porque el proceso principal (/bin/bash) ha finalizado.

Verifiquemos que el contenedor se ha detenido listando todos los contenedores:

docker ps -a

Deberías ver el contenedor con el comando /bin/bash en estado Exited.

CONTAINER ID   IMAGE    COMMAND       CREATED         STATUS                      PORTS    NAMES
[container_id]   ubuntu   "/bin/bash"   About a minute ago   Exited (0) 5 seconds ago             ...
...

Ejecutar contenedores interactivamente es esencial para explorar imágenes de contenedores, depurar aplicaciones dentro de contenedores y realizar tareas administrativas.

Resumen

En este laboratorio, aprendiste a crear y detener contenedores Docker utilizando los comandos docker run y docker stop. Practicaste la descarga de imágenes con docker pull y verificaste el estado de los contenedores usando docker ps -a. También creaste un contenedor que finalizó inmediatamente (hello-world) y otro que permaneció en ejecución durante un período (ubuntu con sleep).

Luego exploraste diferentes formas de reiniciar contenedores detenidos usando el comando docker start. Aprendiste cómo simplemente iniciar un contenedor, cómo iniciarlo y conectarte a su salida usando el flag -a, y cómo iniciar un contenedor interactivamente usando el flag -i, lo que te permite ejecutar comandos dentro del contenedor en ejecución.