I have the following image: nginx:1.19.0-alpine
I want to know about its docker file. I checked https://github.com/nginxinc/docker-nginx but could not understand how to check
Basically i want to change the /docker-entrypoint.sh
Currently its
#!/usr/bin/env sh
# vim:sw=4:ts=4:et
set -e
if [ "$1" = "nginx" -o "$1" = "nginx-debug" ]; then
if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -maxdepth 1 -type f -print -quit 2>/dev/null | read v; then
echo "$0: /docker-entrypoint.d/ is not empty, will attempt to perform configuration"
echo "$0: Looking for shell scripts in /docker-entrypoint.d/"
find "/docker-entrypoint.d/" -follow -type f -print | sort -n | while read -r f; do
case "$f" in
*.sh)
if [ -x "$f" ]; then
echo "$0: Launching $f";
"$f"
else
# warn on shell scripts without exec bit
echo "$0: Ignoring $f, not executable";
fi
;;
*) echo "$0: Ignoring $f";;
esac
done
echo "$0: Configuration complete; ready for start up"
else
echo "$0: No files found in /docker-entrypoint.d/, skipping configuration"
fi
fi
# Handle enabling SSL
if [ "$ENABLE_SSL" = "True" ]; then
echo "Enabling SSL support!"
cp /etc/nginx/configs/default_ssl.conf /etc/nginx/conf.d/default.conf
fi
exec "$@"
I want it to modify it as
#!/usr/bin/env sh
# vim:sw=4:ts=4:et
set -x -o verbose;
echo $1
if [ "$1" = "nginx" -o "$1" = "nginx-debug" ]; then
if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -maxdepth 1 -type f -print -quit 2>/dev/null | read v; then
echo "$0: /docker-entrypoint.d/ is not empty, will attempt to perform configuration"
echo "$0: Looking for shell scripts in /docker-entrypoint.d/"
find "/docker-entrypoint.d/" -follow -type f -print | sort -n | while read -r f; do
case "$f" in
*.sh)
if [ -x "$f" ]; then
echo "$0: Launching $f";
"$f"
else
# warn on shell scripts without exec bit
echo "$0: Ignoring $f, not executable";
fi
;;
*) echo "$0: Ignoring $f";;
esac
done
echo "$0: Configuration complete; ready for start up"
else
echo "$0: No files found in /docker-entrypoint.d/, skipping configuration"
fi
fi
# Handle enabling SSL
if [ "$ENABLE_SSL" = "True" ]; then
echo "Enabling SSL support!"
cp /etc/nginx/configs/default_ssl.conf /etc/nginx/conf.d/default.conf
fi
exec "$@"
I see $1 is being passed. But no clue what to pass
CodePudding user response:
Normally, the CMD from the Dockerfile is sent as parameters to the ENTRYPOINT. In the generated Dockerfile (found here for current alpine: https://github.com/nginxinc/docker-nginx/blob/master/stable/alpine/Dockerfile), you can see that the CMD is CMD ["nginx", "-g", "daemon off;"].
So in normal use, the parameters for the entrypoint script are "nginx", "-g" and "daemon off;".
Since the first parameter is "nginx", the script will enter the if block and run the code in there.
The if is there in case you want to run a different command. For instance if you want to enter the shell and look around in the image, you could do docker run -it nginx:alpine /bin/sh. Now the parameter for the entrypoint.sh script is just "/bin/sh" and now the script won't enter the if-block.
If you want to build your own, modified version of the image, you can fork https://github.com/nginxinc/docker-nginx/ and build from your own version of the repo.
If you need the 1.19 version of the Dockerfile, you'll have to look through the old versions on the repo. The 1.19.0 version is here: https://github.com/nginxinc/docker-nginx/blob/1.19.0/stable/alpine/Dockerfile
