Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

226
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!