#!/bin/bash # short curcuit the entrypoint if $ENTRYPOINT_SKIP isn't set to 0 if [[ ${ENTRYPOINT_SKIP:=0} != 0 ]]; then exec "$@" fi : "${ENTRYPOINT_ROOT:="/docker"}" export ENTRYPOINT_ROOT # Directory where entrypoint scripts lives : "${ENTRYPOINT_D_ROOT:="${ENTRYPOINT_ROOT}/entrypoint.d/"}" export ENTRYPOINT_D_ROOT : "${DOCKER_APP_HOST_OVERRIDES_PATH:="${ENTRYPOINT_ROOT}/overrides"}" export DOCKER_APP_HOST_OVERRIDES_PATH # Space separated list of scripts the entrypoint runner should skip : "${ENTRYPOINT_SKIP_SCRIPTS:=""}" # Load helper scripts # # shellcheck source=SCRIPTDIR/helpers.sh source "${ENTRYPOINT_ROOT}/helpers.sh" # Set the entrypoint name for logging entrypoint-set-script-name "entrypoint.sh" # Convert ENTRYPOINT_SKIP_SCRIPTS into a native bash array for easier lookup declare -a skip_scripts # shellcheck disable=SC2034 IFS=' ' read -ar skip_scripts <<< "$ENTRYPOINT_SKIP_SCRIPTS" # Ensure the entrypoint root folder exists mkdir -p "${ENTRYPOINT_D_ROOT}" # If ENTRYPOINT_D_ROOT directory is empty, warn and run the regular command if directory-is-empty "${ENTRYPOINT_D_ROOT}"; then log-warning "No files found in ${ENTRYPOINT_D_ROOT}, skipping configuration" exec "$@" fi # If the overridess directory exists, then copy all files into the container if ! directory-is-empty "${DOCKER_APP_HOST_OVERRIDES_PATH}"; then log-info "Overrides directory is not empty, copying files" run-as-current-user cp --verbose --recursive "${DOCKER_APP_HOST_OVERRIDES_PATH}/." / fi acquire-lock "entrypoint.sh" # Start scanning for entrypoint.d files to source or run log-info "looking for shell scripts in [${ENTRYPOINT_D_ROOT}]" find "${ENTRYPOINT_D_ROOT}" -follow -type f -print | sort -V | while read -r file; do # Skip the script if it's in the skip-script list if in-array "$(get-entrypoint-script-name "${file}")" skip_scripts; then log-warning "Skipping script [${file}] since it's in the skip list (\$ENTRYPOINT_SKIP_SCRIPTS)" continue fi # Inspect the file extension of the file we're processing case "${file}" in *.envsh) if ! is-executable "${file}"; then # warn on shell scripts without exec bit log-error-and-exit "File [${file}] is not executable (please 'chmod +x' it)" fi log-info "${section_message_color}============================================================${color_clear}" log-info "${section_message_color}Sourcing [${file}]${color_clear}" log-info "${section_message_color}============================================================${color_clear}" # shellcheck disable=SC1090 source "${file}" # the sourced file will (should) than the log prefix, so this restores our own # "global" log prefix once the file is done being sourced entrypoint-restore-script-name ;; *.sh) if ! is-executable "${file}"; then # warn on shell scripts without exec bit log-error-and-exit "File [${file}] is not executable (please 'chmod +x' it)" fi log-info "${section_message_color}============================================================${color_clear}" log-info "${section_message_color}Executing [${file}]${color_clear}" log-info "${section_message_color}============================================================${color_clear}" "${file}" ;; *) log-warning "Ignoring unrecognized file [${file}]" ;; esac done release-lock "entrypoint.sh" log-info "Configuration complete; ready for start up" exec "$@"