fix: Resolve Docker permission issues in development environment

- Create dedicated Dockerfile.backend.dev for development with proper permissions
- Set user UID/GID to 1000 (common for development systems)
- Create logs and temp directories in Dockerfile before switching user
- Use named volumes for logs, temp, and node_modules to maintain permissions
- Mount only source files instead of entire backend directory
- Remove complex entrypoint script in favor of simple CMD
- Add LOG_DIR and TEMP_DIR environment variables

This fixes the "Permission denied" errors when creating directories in Docker.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-07-23 14:32:14 +02:00
parent d99a299bf5
commit 7bcee648ad
4 changed files with 61 additions and 24 deletions
+1 -11
View File
@@ -1,15 +1,5 @@
#!/bin/sh
set -e
# Ensure logs directory exists with correct permissions
if [ ! -d "/app/logs" ]; then
mkdir -p /app/logs
fi
# Ensure temp directory exists
if [ ! -d "/app/temp" ]; then
mkdir -p /app/temp
fi
# Start the application
exec node src/app.js
exec "$@"
+15 -5
View File
@@ -8,26 +8,30 @@ services:
backend:
build:
context: ./backend
dockerfile: ../docker/Dockerfile.backend
dockerfile: ../docker/Dockerfile.backend.dev
container_name: minio-webui-backend-dev
restart: unless-stopped
environment:
NODE_ENV: development
PORT: 7510
LOG_DIR: /app/logs
TEMP_DIR: /app/temp
env_file:
- .env
ports:
- "7510:7510"
volumes:
- ./backend:/app
- /app/node_modules
- ./logs:/app/logs
- ./backend/src:/app/src
- ./backend/package.json:/app/package.json
- ./backend/package-lock.json:/app/package-lock.json
- backend-logs:/app/logs
- backend-temp:/app/temp
- backend-node-modules:/app/node_modules
- ~/.mc:/home/nodejs/.mc:ro
depends_on:
- redis
networks:
- minio-webui-network
command: npm run dev
frontend:
build:
@@ -68,6 +72,12 @@ services:
volumes:
redis-data:
driver: local
backend-logs:
driver: local
backend-temp:
driver: local
backend-node-modules:
driver: local
networks:
minio-webui-network:
+4 -8
View File
@@ -21,14 +21,10 @@ COPY . .
RUN addgroup -g 1001 -S nodejs && \
adduser -S nodejs -u 1001
# Create logs directory with proper permissions
RUN mkdir -p logs && \
# Create necessary directories with proper permissions
RUN mkdir -p logs temp && \
chown -R nodejs:nodejs /app && \
chmod 755 logs
# Copy and set permissions for entrypoint
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
chmod 755 logs temp
# Switch to non-root user
USER nodejs
@@ -37,4 +33,4 @@ USER nodejs
EXPOSE 3000
# Start the application
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["node", "src/app.js"]
+41
View File
@@ -0,0 +1,41 @@
FROM node:20-alpine
# Install MinIO client
RUN wget https://dl.min.io/client/mc/release/linux-amd64/mc && \
chmod +x mc && \
mv mc /usr/local/bin/
# Install development dependencies
RUN apk add --no-cache bash
# Create app directory
WORKDIR /app
# Create non-root user (same UID/GID as most development systems)
RUN addgroup -g 1000 -S nodejs && \
adduser -S nodejs -u 1000 -G nodejs
# Copy package files
COPY package*.json ./
# Install dependencies as root
RUN npm install
# Create necessary directories
RUN mkdir -p logs temp && \
chmod 755 logs temp
# Copy application files
COPY . .
# Change ownership of everything to nodejs user
RUN chown -R nodejs:nodejs /app
# Switch to non-root user
USER nodejs
# Expose port
EXPOSE 7510
# Start the application in development mode
CMD ["npm", "run", "dev"]