I'm trying to run a script during my building process in my Dockerfile. But it doesn't seems to work.
I tried that way:
FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]
Also this way:
FROM php:7-fpm
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"
And also bu executing my running container:
docker exec symfony /bin/bash -c "/bootstrap.sh"
Nothing seems to work.
Do you know how to do it?
In addition to the answers above:
If you created/edited your .sh script file in Windows, make sure it was saved with line ending in Unix format. By default many editors in Windows will convert Unix line endings to Windows format and Linux will not recognize shebang (#!/bin/sh) at the beginning of the file. So Linux will produce the error message like if there is no shebang.
Tips:
Try to create script with
ADD
command and specification of working directory Like this("script" is the name of script and/root/script.sh
is where you want it in the container, it can be different path:In this case
ADD
has to come beforeCMD
, if you have one BTW it's cool way to import scripts to any location in container from host machineIn
CMD
place[./script]
It should automatically execute your script
You can also specify
WORKDIR
as/root
, then you'l be automatically placed in root, upon starting a containerRUN
andENTRYPOINT
are two different way to execute a script.RUN
means it creates an intermediate container, runs the script and freeze the new state of that container in a new intermediate image. The script won't be run after that: your final image is supposed to reflect the result of that script.ENTRYPOINT
means your image (which has not executed the script yet) will create a container, and runs that script.In both cases, the script needs to be added, and a
RUN chmod +x /bootstrap.sh
is a good idea.It should also start with a shebang (like
#!/bin/sh
)Considering your script (
KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh
: a couple ofgit config --global
commands), it would be best to RUN that script once in your Dockerfile, but making sure to use the right user (the global git config file is %HOME%/.gitconfig, which by default is the /root one)Add to your Dockerfile:
Then, when running a container, check the content of
/root/.gitconfig
to confirm the script was run.