Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

227
Vistas
La instrucción Dockerfile CMD saldrá del contenedor justo después de ejecutarlo

Quiero configurar alguna configuración cuando se inicia mi contenedor, para esto estoy usando scripts de shell. Pero mi contenedor se cerrará tan pronto como finalicen mis scripts, lo he intentado con -d flag/modo separado pero nunca se ejecutará en modo separado.

A continuación se muestra mi Dockerfile

 FROM ubuntu:14.04 ADD shell.sh /usr/local/bin/shell.sh RUN chmod 777 /usr/local/bin/shell.sh CMD /usr/local/bin/shell.sh

A continuación se muestra mi script de shell

 #!/bin/bash echo Hello-docker
  1. Corre sin ninguna bandera

     docker run hello-docker

    Esto imprimirá 'Hello-docker' en mi consola y saldrá

  2. Ejecutar con banderas -itd

     docker run -itd hello-docker

    y como debajo de la salida de mi consola, esta vez también saldrá pronto. :( ingrese la descripción de la imagen aquí

    • La diferencia que vi está en la sección de COMANDO cuando ejecuto otras imágenes, la sección de comando mostrará "/ bin/bash" y continuará en modo separado.

    • Y cuando ejecuto mi imagen en el contenedor con el script de shell, la sección COMMAND mostrará "/bin/sh -c /usr/loca", y Salir.

    • Quiero ejecutar el contenedor hasta que no lo detenga manualmente.

EDITAR:

Después de agregar la instrucción ENTRYPOINT en Dockerfile, esto no ejecutará mi script de shell :(

 FROM ubuntu:14.04 ADD shell.sh /usr/local/bin/shell.sh RUN chmod 777 /usr/local/bin/shell.sh CMD /usr/local/bin/shell.sh ENTRYPOINT /bin/bash

Según la documentación de la ventana acoplable aquí

CMD se anulará cuando se ejecute el contenedor con argumentos alternativos, por lo que si ejecuto la imagen de la ventana acoplable con algunos argumentos como se muestra a continuación, no se ejecutarán las instrucciones de CMD. :(

 sudo docker run -it --entrypoint=/bin/bash <imagename>
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Un contenedor docker se ejecutará durante el tiempo que tome el CMD de su Dockerfile.

En su caso, su CMD consiste en un script de shell que contiene un solo eco. Entonces el contenedor saldrá después de completar el eco.

Puede anular CMD , por ejemplo:

 sudo docker run -it --entrypoint=/bin/bash <imagename>

Esto iniciará un shell interactivo en su contenedor en lugar de ejecutar su CMD . Su contenedor saldrá tan pronto como salga de ese caparazón.

Si desea que su contenedor permanezca activo, debe asegurarse de que su CMD siga ejecutándose. Por ejemplo, agregando la línea while true; do sleep 1; done en su archivo shell.sh, su contenedor imprimirá su mensaje de saludo y luego no hará nada más hasta que lo detenga (usando docker stop en otra terminal).

Puede abrir un shell en el contenedor en ejecución usando docker exec -it <containername> bash . Si luego ejecuta el comando ps ax , le mostrará que su shell.sh todavía se está ejecutando dentro del contenedor.

over 4 years ago · Santiago Trujillo Denunciar

0

Finalmente, con algunos experimentos, obtuve mi mejor resultado como se muestra a continuación.

No hay nada de malo en mi Dockerfile, ya que a continuación es correcto.

 FROM ubuntu:14.04 ADD shell.sh /usr/local/bin/shell.sh RUN chmod 777 /usr/local/bin/shell.sh CMD /usr/local/bin/shell.sh

Lo que hago para obtener el resultado esperado es agregar un comando más (/bin/bash) en mi archivo de script de shell como se muestra a continuación y vola todo funciona de la mejor manera.

 #!/bin/bash echo “Hello-docker” > /usr/hello.txt /bin/bash
over 4 years ago · Santiago Trujillo Denunciar

0

También puede modificar su primer Dockerfile, reemplazando

CMD /usr/local/bin/shell.sh

por

CMD /usr/local/bin/shell.sh ; sleep infinity

De esa manera, su secuencia de comandos no termina y su contenedor sigue ejecutándose.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda