imagenes hub ejemplos compose bash shell docker sh dockerfile

bash - hub - La instrucción CMD de Dockerfile saldrá del contenedor justo después de ejecutarlo



dockerfile ejemplos (4)

Finalmente con algunos experimentos obtuve mi mejor resultado como abajo.

No hay nada malo con mi Dockerfile ya que abajo 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 que solo agrego un comando más (/ bin / bash) en mi archivo de script de shell como se muestra a continuación y para que todo funcione de la mejor manera posible.

#!/bin/bash echo “Hello-docker” > /usr/hello.txt /bin/bash

Quiero configurar algo de configuración cuando se inicie mi contenedor, para esto estoy usando shell scripts. Pero mi contenedor saldrá tan pronto como terminen mis scripts, lo he intentado con el modo -d indiferencia / bandera 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 sale

  2. Ejecutar con banderas -itd

    docker run -itd hello-docker

    y como debajo de mi salida de consola, esta vez también saldrá pronto. :(

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

    • Y cuando ejecute mi imagen en un contenedor con shell, la sección de COMANDO 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 here

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>


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 script no termina, y su contenedor permanece en ejecución.


Un contenedor de la ventana acoplable funcionará mientras se lleve el CMD de su Dockerfile.

En su caso, su CMD consiste en un script de shell que contiene un solo eco. Así que 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 shell.

Si desea que su contenedor permanezca activo, debe asegurarse de que su CMD siga funcionando. Por ejemplo, añadiendo la línea while true; do sleep 1; done while true; do sleep 1; done while true; do sleep 1; done a su archivo shell.sh, su contenedor imprimirá su mensaje de saludo y luego no hará nada más hasta que lo detenga (usando la función de conexión en otro 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.


CMD bash -C ''/path/to/start.sh'';''bash''