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 en ejecución:
docker exec symfony /bin/bash -c "/bootstrap.sh"
Nada parece funcionar.
¿Sabes como hacerlo?
docker
dockerfile
Kevin
fuente
fuente

bootstarp.shTiene el bit ejecutable configurado?docker exec -it symfony bashdentro del contenedor, ¿puede ejecutar manualmente el script y verificar su contenido? (cat bootstarp.sh)?docker exec symfony /bin/bash /bootstarp.shy déjame saber el resultado.Respuestas:
RUNyENTRYPOINTson dos formas diferentes de ejecutar un script.RUNsignifica 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 refleja el resultado de ese script.ENTRYPOINTsignifica que su imagen (que aún no ha ejecutado el script) creará un contenedor y ejecutará ese script.En ambos casos, es necesario agregar el script y
RUN chmod +x /bootstrap.shes una buena idea.También debería comenzar con un shebang (como
#!/bin/sh)Teniendo en cuenta su secuencia de comandos (
bootstarp.sh: un par degit config --globalcomandos), sería mejor queRUNesa secuencia de comandos una vez en suDockerfile, pero asegúrese de usar el usuario correcto (elgit configarchivo global es%HOME%/.gitconfig, que por defecto es el/rootindicado)Agregue a su Dockerfile:
Luego, cuando ejecute un contenedor, verifique el contenido de
/root/.gitconfigpara confirmar que se ejecutó el script.fuente
bootstrap.shlugar debootstarp.sh: consulte stackoverflow.com/a/1254561/6309Además de las respuestas anteriores:
Si creó / editó su archivo de secuencia de comandos .sh en Windows, asegúrese de que se haya guardado con el final de línea en formato Unix . De forma predeterminada, muchos editores de Windows convertirán los finales de línea de Unix al formato de Windows y Linux no reconocerá shebang (#! / Bin / sh) al principio del archivo. Entonces Linux producirá el mensaje de error como si no hubiera shebang.
Consejos:
fuente
Intente crear un script con el
ADDcomando y la especificación del directorio de trabajo Así ("script" es el nombre del script y/root/script.shes donde lo quiere en el contenedor, puede ser una ruta diferente:En este caso
ADDtiene que venir antesCMD, si tiene uno, por cierto, es una buena manera de importar scripts a cualquier ubicación en el contenedor desde la máquina hostEn su
CMDlugar[./script]Debería ejecutar automáticamente su script
También puede especificar
WORKDIRcomo/root, luego se le colocará automáticamente en la raíz, al iniciar un contenedorfuente
script.shscript.shes relativo alDockerfileEs una buena práctica usarlo en
COPYlugar deADDcuando está copiando desde el sistema de archivos local a la imagen. Además, recomendaría crear una subcarpeta para colocar su contenido. Al menos, mantiene las cosas ordenadas. Asegúrese de marcar el script como ejecutable usandochmod.Aquí, estoy creando una
scriptssubcarpeta para colocar mi script y ejecutarlo desde:fuente