es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué el contenedor Docker se está cerrando instantáneamente pero funciona correctamente en AWS User Data con el mismo comando?

CMD A:
docker run -p 80:80 –detach=true -v /var/log/container/nginx:/var/log –name=nginx -t nombre_de_imagen

CMD B:
docker run -d -p 80:80 –name=nginx -t nombre_de_imagen

¿Cuál es la diferencia entre estos dos comandos? ¿Por qué el CMD B funciona pero no el A? Es decir, cuando ejecuto el CMD B, el contenedor de nginx no se cierra, pero cuando uso el CMD A, se cierra instantáneamente. Sin embargo, cuando el CMD A se utiliza en el userdata de AWS, funciona correctamente. ¿Por qué es así? Quiero actualizar la versión de nginx en AWS, pero cuando intenté el CMD A en mi sistema local, no mostró ningún error, pero Docker se cierra instantáneamente. Cuando intenté el CMD B, funcionó. Lo mismo ocurre en la instancia de EC2 de AWS, pero el mismo comando está presente en el userdata y funciona, pero luego no funciona en la terminal de la instancia de EC2 de CentOS.

A continuación se detallan los pasos para reproducir el problema:

Dockerfile
Las siguientes 2 líneas son el contenido del Dockerfile:
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
Luego, utilicé este comando para crear la imagen en Ubuntu (mi sistema local) y CentOS (instancia de EC2):
//docker build -t “nombre_de_imagen” .

Luego, ejecuto los comandos de “docker run” mencionados anteriormente y recibo el problema.
Mi sistema operativo actual es Ubuntu 20.4.
La versión de la instancia de EC2 es CentOS 7.4.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    CMD A y CMD B se utilizan para ejecutar un contenedor Docker a partir de una imagen llamada “imagename” y mapear el puerto 80 del contenedor al puerto 80 de la máquina host. Sin embargo, hay una diferencia en las banderas utilizadas para cada comando.

    En CMD A, se utiliza la bandera –detach=true para ejecutar el contenedor en modo desacoplado y la bandera -v /var/log/container/nginx:/var/log se utiliza para montar los registros del contenedor en el directorio /var/log/container/nginx de la máquina host.

    En CMD B, se utiliza la bandera -d para ejecutar el contenedor en modo desacoplado sin montar registros.

    La razón por la que CMD A se cierra instantáneamente podría deberse a un problema con el volumen montado, ya que montar volúmenes a veces puede causar problemas con la inicialización del contenedor. Sin embargo, cuando se utiliza CMD A en userdata de una instancia de AWS, funciona porque userdata se ejecuta al iniciar la instancia, y en ese momento es posible que el contenedor ya se haya inicializado correctamente.

    Para actualizar la versión de nginx en AWS, puedes crear una nueva imagen de Docker con la versión actualizada y utilizar esa imagen para ejecutar un nuevo contenedor.

    Si CMD B funciona tanto en tu sistema local como en la instancia de AWS, se recomienda utilizarlo en lugar de CMD A.

    Para reproducir el problema, puedes crear un Dockerfile con el contenido mencionado anteriormente y construir la imagen de Docker utilizando el comando “docker build -t imagename .” tanto en tu sistema local como en la instancia de AWS. Luego, ejecuta cada uno de los CMD mencionados anteriormente y observa el comportamiento del contenedor de Docker.

Comments are closed.