script run name example entrypoint and docker dockerfile

run - Ejecuta un script en Dockerfile



dockerfile name image (3)

Además de las respuestas anteriores:

Si creó / editó su archivo de script .sh en Windows, asegúrese de que se haya guardado con la línea que termina en formato Unix . Por defecto, muchos editores en Windows convertirán las terminaciones de línea de Unix al formato de Windows y Linux no reconocerá shebang (#! / Bin / sh) al comienzo del archivo. Entonces Linux producirá el mensaje de error como si no hubiera shebang.

Consejos:

  • Si usa Notepad ++, debe hacer clic en "Editar / Conversión EOL / UNIX (LF)"
  • Si usa Visual Studio, sugeriría instalar el complemento " Fin de línea ". Luego puede hacer visibles las terminaciones de línea presionando Ctrl-R, Ctrl-W. Y para configurar las terminaciones de estilo Linux, puede presionar Ctrl-R, Ctrl-L. Para el estilo de Windows, presione Ctrl-R, Ctrl-C.

Estoy tratando de ejecutar un script durante mi proceso de construcción en mi Dockerfile. Pero no parece funcionar.

Lo intenté de esa manera:

FROM php:7-fpm ADD bootstrap.sh / ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]

También de esta manera:

FROM php:7-fpm ADD bootstrap.sh / RUN bash -c "/bootstrap.sh"

Y también bu ejecutando mi contenedor de ejecución:

docker exec symfony /bin/bash -c "/bootstrap.sh"

Nada parece funcionar.

¿Sabes como hacerlo?


Intente crear un script con el comando ADD y la especificación del directorio de trabajo De esta manera ("script" es el nombre del script y /root/script.sh es donde lo quiere en el contenedor, puede ser una ruta diferente:

ADD script.sh /root/script.sh

En este caso, ADD tiene que venir antes que CMD , si tiene un BTW, es una forma genial de importar scripts a cualquier ubicación en el contenedor desde la máquina host

En lugar de CMD [./script]

Debería ejecutar automáticamente tu script

También puede especificar WORKDIR como /root , luego se colocará automáticamente en la raíz, al iniciar un contenedor


RUN y ENTRYPOINT son dos formas diferentes de ejecutar un script.

RUN significa que crea un contenedor intermedio, ejecuta el script y congela el nuevo estado de ese contenedor en una nueva imagen intermedia. El script no se ejecutará después de eso: se supone que su imagen final debe reflejar el resultado de ese script.

ENTRYPOINT significa que su imagen (que aún no ha ejecutado el script) creará un contenedor y ejecutará ese script.

En ambos casos, el script necesita ser agregado, y un RUN chmod +x /bootstrap.sh es una buena idea.

También debería comenzar con un shebang (como #!/bin/sh )

Teniendo en cuenta su script ( KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh : un par de git config --global ), sería mejor EJECUTAR ese script una vez en su Dockerfile, pero asegurándose de usar el usuario correcto (el archivo de configuración global de git es% HOME% /. gitconfig, que por defecto es / root)

Agregue a su Dockerfile :

RUN /bootstart.sh

Luego, cuando ejecute un contenedor, verifique el contenido de /root/.gitconfig para confirmar que se ejecutó el script.