From 3c271a2a725f588ee98a24180967c223c2af0eab Mon Sep 17 00:00:00 2001 From: licsber Date: Tue, 11 Nov 2025 15:24:40 +0800 Subject: [PATCH] fix: docker permission again. --- Dockerfile | 10 ++++++++-- docker-compose.yml | 8 ++++++++ scripts/init-data-dir.sh | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 scripts/init-data-dir.sh diff --git a/Dockerfile b/Dockerfile index d600cc4..d19cef8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,8 +11,9 @@ FROM base AS production COPY --from=deps /app/node_modules ./node_modules COPY . . -# Create directory for database with proper permissions -RUN mkdir -p /app/data && chown -R 1001:1001 /app/data +# Copy init script +COPY scripts/init-data-dir.sh /usr/local/bin/init-data-dir.sh +RUN chmod +x /usr/local/bin/init-data-dir.sh EXPOSE 3000 @@ -20,9 +21,14 @@ EXPOSE 3000 RUN addgroup -g 1001 -S nodejs RUN adduser -S nextjs -u 1001 +# Create directory for database +RUN mkdir -p /app/data + USER nextjs # Set environment variable for database path ENV DB_PATH=/app/data/data.db +# Use init script as entrypoint wrapper +ENTRYPOINT ["/usr/local/bin/init-data-dir.sh"] CMD ["node", "server.js"] diff --git a/docker-compose.yml b/docker-compose.yml index 1ac6d1c..dc81f29 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,3 +16,11 @@ services: volumes: - ./data:/app/data restart: unless-stopped + depends_on: + - init-data-dir + + init-data-dir: + image: alpine:latest + command: chown -R 1001:1001 /app/data + volumes: + - ./data:/app/data diff --git a/scripts/init-data-dir.sh b/scripts/init-data-dir.sh new file mode 100644 index 0000000..d21fd21 --- /dev/null +++ b/scripts/init-data-dir.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# Create data directory if it doesn't exist +mkdir -p /app/data + +# Try to set permissions for the data directory +# This might fail in some environments, but that's okay +chown -R 1001:1001 /app/data 2>/dev/null || true +chmod 755 /app/data 2>/dev/null || true + +echo "Data directory initialized" + +# Execute the main command +exec "$@"