Reiniciar un contenedor Docker

David Mbochi Njonge 20 junio 2023
  1. Extraiga una imagen de Nginx del Docker Hub
  2. Ejecutar un contenedor desde la imagen
  3. Reiniciar un contenedor en ejecución
  4. Reiniciar un contenedor detenido
  5. El contenedor Docker sale inmediatamente
  6. Conclusión
Reiniciar un contenedor Docker

Cuando se detiene un contenedor que anteriormente se ejecutaba en segundo plano, la ventana acoplable proporciona algunos comandos que podemos usar para reiniciar el contenedor.

En este tutorial, aprenderemos cómo reiniciar un contenedor docker con un servidor Nginx ejecutándose en segundo plano. También aprenderemos cómo algunos comandos conducen a la terminación inmediata de un contenedor.

Extraiga una imagen de Nginx del Docker Hub

Para comenzar, debemos extraer una imagen de Nginx del centro de la ventana acoplable para ejecutar imágenes desde ella. Sin embargo, puede crear su imagen personalizada usando Dockerfile.

Abra la ventana de terminal en su computadora y use el siguiente comando para extraer la imagen.

~$ docker pull nginx:alpine

Ejecutar un contenedor desde la imagen

En esta sección, ejecutaremos un contenedor con un servidor Nginx en segundo plano. Use el siguiente comando para ejecutar un contenedor con el nombre aplicación web.

~$ docker run --name web-app -d -p 8000:80 nginx:alpine

En este comando, hemos usado el indicador --name para crear un nombre para el contenedor. Además, también hemos utilizado la bandera -d, que nos permite ejecutar un contenedor en segundo plano.

Por último, hemos agregado el indicador -p para publicar el puerto del contenedor en el host. Puede usar el siguiente comando para verificar que el contenedor esté en funcionamiento.

~$ docker ps

Producción :

CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                  NAMES
c18fa4102fb2   nginx:alpine   "/docker-entrypoint.…"   5 seconds ago   Up 3 seconds   0.0.0.0:8000->80/tcp   web-app

Reiniciar un contenedor en ejecución

Hay dos enfoques que podemos usar para reiniciar un contenedor. El primer enfoque usa el comando docker start, mientras que el segundo enfoque usa el comando docker restart.

El comando docker start se usa para iniciar un contenedor detenido, y el comando docker restart se usa para reiniciar un contenedor en ejecución.

Dado que nuestro contenedor ya se está ejecutando, use el siguiente comando para reiniciar el contenedor aplicación web.

~$ docker restart web-app

Use el siguiente comando para verificar que el contenedor esté en funcionamiento después de reiniciar el contenedor.

~$ docker ps

Producción :

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS        PORTS                  NAMES
c18fa4102fb2   nginx:alpine   "/docker-entrypoint.…"   20 minutes ago   Up 1 second   0.0.0.0:8000->80/tcp   web-app

Reiniciar un contenedor detenido

Este enfoque es el mismo que el anterior. Debemos usar el comando docker stop para detener el contenedor en ejecución.

Una vez detenido el contenedor, utilice el comando docker start para reiniciar el contenedor detenido. Ejecute los siguientes comandos para ver cómo funciona esto en la práctica.

~$ docker stop web-app

Producción :

web-app

Si ejecuta el comando docker ps -a para enumerar todos los contenedores en ejecución y detenidos, puede ver que se ha salido del estado del contenedor aplicación web, lo que significa que el contenedor se ha detenido.

~$ docker ps -a

Producción :

CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS                          PORTS      NAMES
c18fa4102fb2   nginx:alpine     "/docker-entrypoint.…"   32 minutes ago   Exited (0) About a minute ago              web-app

Finalmente, use el siguiente comando para reiniciar el contenedor.

~$ docker start web-app && docker ps

Producción :

web-app
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                  PORTS                  NAMES
c18fa4102fb2   nginx:alpine   "/docker-entrypoint.…"   37 minutes ago   Up Less than a second   0.0.0.0:8000->80/tcp   web-app

El contenedor Docker sale inmediatamente

El contenedor de la sección anterior no finalizó porque el contenedor tenía un proceso Nginx ejecutándose en segundo plano.

Hay casos en los que el contenedor docker sale inmediatamente si ha terminado de ejecutar su proceso. Para ilustrar esto, ejecute el siguiente comando para crear un nuevo contenedor con el nombre temp-web-app.

~$ docker run -w /com/web-app/ --name temp-web-app -p 8080:80  nginx:alpine pwd

Producción :

/com/web-app

Tenga en cuenta que este comando finaliza inmediatamente después de imprimir el directorio de trabajo /com/web-app. Esto se debe a que el contenedor sale una vez que su proceso principal ejecuta el comando pwd.

Por lo tanto, los comandos como el anterior deben usarse con fines de prueba y no para ejecutar contenedores con un servidor, una base de datos o un proceso de aplicación. Use el siguiente comando para verificar el estado del contenedor temp-web-app.

CONTAINER ID   IMAGE            COMMAND                  CREATED             STATUS                      PORTS                  NAMES
fb051673c15f   nginx:alpine     "/docker-entrypoint.…"   14 minutes ago      Exited (0) 3 minutes ago                           temp-web-app

Cualquier intento de reiniciar el contenedor no funcionará ya que el comando predeterminado se establece durante la puesta en marcha inicial. Lo que significa que el contenedor siempre terminará después de ejecutar el comando pwd donde sale el proceso principal del contenedor.

Conclusión

Aprendimos en este tutorial cómo reiniciar un contenedor en Docker. Hemos cubierto cómo iniciar un contenedor en ejecución y parada.

Hemos aprendido el propósito de ejecutar contenedores que salen inmediatamente sin que se ejecuten procesos en segundo plano.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

Artículo relacionado - Docker Container