docker-entrypoint.sh•2.94 kB
#!/bin/bash
# Don't exit immediately so we can debug issues
# set -e
# Function to replace localhost in a string with the Docker host
replace_localhost() {
local input_str="$1"
local docker_host=""
# Try to determine Docker host address
if ping -c 1 -w 1 host.docker.internal >/dev/null 2>&1; then
docker_host="host.docker.internal"
echo "Docker Desktop detected: Using host.docker.internal for localhost" >&2
elif ping -c 1 -w 1 172.17.0.1 >/dev/null 2>&1; then
docker_host="172.17.0.1"
echo "Docker on Linux detected: Using 172.17.0.1 for localhost" >&2
else
echo "WARNING: Cannot determine Docker host IP. Using original address." >&2
return 1
fi
# Replace localhost with Docker host
if [[ -n $docker_host ]]; then
local new_str="${input_str/localhost/$docker_host}"
echo " Remapping: $input_str --> $new_str" >&2
echo "$new_str"
return 0
fi
# No replacement made
echo "$input_str"
return 1
}
# Create a new array for the processed arguments
processed_args=()
processed_args+=("$1")
shift 1
# Process remaining command-line arguments for postgres:// or postgresql:// URLs that contain localhost
for arg in "$@"; do
if [[ $arg == *"postgres"*"://"*"localhost"* ]]; then
echo "Found localhost in database connection: $arg" >&2
new_arg=$(replace_localhost "$arg")
if [[ $? -eq 0 ]]; then
processed_args+=("$new_arg")
else
processed_args+=("$arg")
fi
else
processed_args+=("$arg")
fi
done
# Check and replace localhost in DATABASE_URI if it exists
if [[ -n $DATABASE_URI && $DATABASE_URI == *"postgres"*"://"*"localhost"* ]]; then
echo "Found localhost in DATABASE_URI: $DATABASE_URI" >&2
new_uri=$(replace_localhost "$DATABASE_URI")
if [[ $? -eq 0 ]]; then
export DATABASE_URI="$new_uri"
fi
fi
# Check if SSE transport is specified and --sse-host is not already set
has_sse=false
has_sse_host=false
for arg in "${processed_args[@]}"; do
if [[ $arg == "--transport" ]]; then
# Check next argument for "sse"
for next_arg in "${processed_args[@]}"; do
if [[ $next_arg == "sse" ]]; then
has_sse=true
break
fi
done
elif [[ $arg == "--transport=sse" ]]; then
has_sse=true
elif [[ $arg == "--sse-host"* ]]; then
has_sse_host=true
fi
done
# Add --sse-host if needed
if [[ $has_sse == true ]] && [[ $has_sse_host == false ]]; then
echo "SSE transport detected, adding --sse-host=0.0.0.0" >&2
processed_args+=("--sse-host=0.0.0.0")
fi
echo "----------------" >&2
echo "Executing command:" >&2
echo "${processed_args[@]}" >&2
echo "----------------" >&2
# Execute start.sh instead of the processed arguments
/app/start.sh
# Capture exit code from the Python process
exit_code=$?
# If the Python process failed, print additional debug info
if [ $exit_code -ne 0 ]; then
echo "ERROR: Command failed with exit code $exit_code" >&2
echo "Command was: ${processed_args[@]}" >&2
fi
# Return the exit code from the Python process
exit $exit_code