Ejecutar un script en Dockerfile


Estoy intentando ejecutar un script durante mi proceso de compilació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 en ejecución:

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

Nada parece funcionar.

¿sabes cómo hacerlo?

Author: steampowered, 2015-12-31

3 answers

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 debe ser añadido, y un RUN chmod +x /bootstrap.sh es una buena idea.

También debe comenzar con un shebang (como #!/bin/sh)

Teniendo en cuenta su script (KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh: un par de comandos 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 el / root)

Añadir a su Dockerfile:

RUN /bootstart.sh

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

 52
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-11 13:16:07

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

ADD script.sh /root/script.sh

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

En CMD lugar [./script]

Debería ejecutar automáticamente su script

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

 14
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-28 13:33:10

Además De las respuestas anteriores:

Si creó/editó su archivo de script .sh en Windows, asegúrese de que se guardó con una línea que termina en formato Unix. Por defecto muchos editores en Windows convertirán los finales de línea Unix a formato Windows y Linux no reconocerá shebang (#!/bin / sh) al principio del archivo. Así que Linux producirá el mensaje de error como si no hay shebang.

 0
Author: VeganHunter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-12 06:11:57