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.