#!/bin/sh set -e # Use PUID/PGID from environment, default to 1000 PUID=${PUID:-1000} PGID=${PGID:-1000} echo "[entrypoint] Starting with PUID=$PUID, PGID=$PGID" echo "[entrypoint] Running as user: $(id)" echo "[entrypoint] Mount info for /app/data:" mount | grep -E "/app|data" || echo "[entrypoint] No specific mount found" # Ensure data directory exists and has correct ownership mkdir -p /app/data echo "[entrypoint] Created /app/data" # Show current ownership before chown echo "[entrypoint] Before chown:" ls -la /app/data/ # Try to chown - this may fail on bind mounts owned by different host user if chown -R "$PUID:$PGID" /app/data 2>&1; then echo "[entrypoint] Set ownership of /app/data to $PUID:$PGID" else echo "[entrypoint] WARNING: chown failed (bind mount may have different host ownership)" fi # Show ownership after chown attempt echo "[entrypoint] After chown:" ls -la /app/data/ # Check if we can write to data directory if touch /app/data/.write-test 2>/dev/null; then rm -f /app/data/.write-test echo "[entrypoint] Write test passed" else echo "[entrypoint] ERROR: Cannot write to /app/data" echo "[entrypoint] FIX: Run on host: sudo chown -R $PUID:$PGID " ls -la /app/ exit 1 fi # Execute the main command as the specified user # Try different methods for dropping privileges if command -v gosu >/dev/null 2>&1; then echo "[entrypoint] Using gosu" exec gosu "$PUID:$PGID" "$@" elif command -v su-exec >/dev/null 2>&1; then echo "[entrypoint] Using su-exec" exec su-exec "$PUID:$PGID" "$@" else echo "[entrypoint] Using su" # Create a temporary user with the specified UID if it doesn't exist if ! id -u "$PUID" >/dev/null 2>&1; then echo "[entrypoint] UID $PUID doesn't exist, running as node user" exec su -s /bin/sh node -c "exec $*" else exec su -s /bin/sh "#$PUID" -c "exec $*" fi fi