76 lines
2.6 KiB
Bash
76 lines
2.6 KiB
Bash
#!/bin/sh
|
|
set -e
|
|
|
|
# Function to fix permissions on mounted volumes
|
|
fix_permissions() {
|
|
# Check if /app/data exists and fix ownership if needed
|
|
if [ -d "/app/data" ]; then
|
|
# Get current user info
|
|
CURRENT_UID=$(id -u)
|
|
CURRENT_GID=$(id -g)
|
|
|
|
# Get directory ownership
|
|
DATA_UID=$(stat -c '%u' /app/data 2>/dev/null || echo "0")
|
|
DATA_GID=$(stat -c '%g' /app/data 2>/dev/null || echo "0")
|
|
|
|
# If ownership doesn't match current user, try to fix it
|
|
if [ "$DATA_UID" != "$CURRENT_UID" ] || [ "$DATA_GID" != "$CURRENT_GID" ]; then
|
|
echo "Fixing permissions on /app/data (was $DATA_UID:$DATA_GID, setting to $CURRENT_UID:$CURRENT_GID)"
|
|
|
|
# Try to change ownership (will work if running as root or if user has permission)
|
|
if chown -R "$CURRENT_UID:$CURRENT_GID" /app/data 2>/dev/null; then
|
|
echo "Successfully updated permissions on /app/data"
|
|
else
|
|
echo "Warning: Could not change ownership of /app/data. You may need to run:"
|
|
echo " docker run --user \$(id -u):\$(id -g) ..."
|
|
echo " or ensure the host directory is owned by UID:GID $CURRENT_UID:$CURRENT_GID"
|
|
fi
|
|
fi
|
|
|
|
# Ensure logs subdirectory exists with correct permissions
|
|
mkdir -p /app/data/logs
|
|
chmod 755 /app/data/logs 2>/dev/null || true
|
|
fi
|
|
}
|
|
|
|
# Fix permissions before starting the application
|
|
fix_permissions
|
|
|
|
# Parse command line arguments and set environment variables
|
|
parse_args() {
|
|
while [ $# -gt 0 ]; do
|
|
case $1 in
|
|
--port|-port)
|
|
if [ -n "$2" ]; then
|
|
export APP_PORT="$2"
|
|
shift 2
|
|
else
|
|
echo "Error: --port requires a value"
|
|
exit 1
|
|
fi
|
|
;;
|
|
--host|-host)
|
|
if [ -n "$2" ]; then
|
|
export APP_HOST="$2"
|
|
shift 2
|
|
else
|
|
echo "Error: --host requires a value"
|
|
exit 1
|
|
fi
|
|
;;
|
|
*)
|
|
# Keep other arguments for the main application
|
|
set -- "$@" "$1"
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# Parse arguments if any are provided
|
|
if [ $# -gt 1 ]; then
|
|
parse_args "$@"
|
|
fi
|
|
|
|
# Build the command with environment variables and standard arguments
|
|
exec /app/main -app-dir "$APP_DIR" -port "$APP_PORT" -host "$APP_HOST" -log-level "$LOG_LEVEL" -log-style "$LOG_STYLE" |