From feae9882bc2e29d565b7c889a8cba1164a008589 Mon Sep 17 00:00:00 2001 From: paul Date: Tue, 19 Aug 2025 22:02:45 +0200 Subject: [PATCH] fix: Resolve Docker temp directory permission issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Updated Dockerfile to create local temp directory with proper permissions - Added volume mount for backend/temp in docker-compose.yml - Improved temp directory fallback logic with multiple alternatives - Added unique timestamps to test files to avoid conflicts - Better logging to identify which temp directory is being used - Try process.cwd()/temp before falling back to OS temp directory This should resolve the persistent EACCES permission errors in Docker containers by ensuring the backend uses a writable temp directory. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .claude-flow/metrics/performance.json | 2 +- .claude-flow/metrics/system-metrics.json | 348 +++++++++++++++++++++++ .claude-flow/metrics/task-metrics.json | 6 +- backend/src/services/minio.service.js | 32 ++- docker-compose.yml | 1 + docker/Dockerfile.backend | 5 +- 6 files changed, 380 insertions(+), 14 deletions(-) diff --git a/.claude-flow/metrics/performance.json b/.claude-flow/metrics/performance.json index f925603..5bb0f63 100644 --- a/.claude-flow/metrics/performance.json +++ b/.claude-flow/metrics/performance.json @@ -1,5 +1,5 @@ { - "startTime": 1755632885258, + "startTime": 1755633733445, "totalTasks": 1, "successfulTasks": 1, "failedTasks": 0, diff --git a/.claude-flow/metrics/system-metrics.json b/.claude-flow/metrics/system-metrics.json index bd0fd45..88565a1 100644 --- a/.claude-flow/metrics/system-metrics.json +++ b/.claude-flow/metrics/system-metrics.json @@ -958,5 +958,353 @@ "cpuLoad": 0.16291155133928573, "platform": "darwin", "uptime": 4319026 + }, + { + "timestamp": 1755632903581, + "memoryTotal": 25769803776, + "memoryUsed": 25694552064, + "memoryFree": 75251712, + "memoryUsagePercent": 99.7079849243164, + "memoryEfficiency": 0.29201507568359375, + "cpuCount": 14, + "cpuLoad": 0.13040597098214285, + "platform": "darwin", + "uptime": 4319056 + }, + { + "timestamp": 1755632933583, + "memoryTotal": 25769803776, + "memoryUsed": 25345081344, + "memoryFree": 424722432, + "memoryUsagePercent": 98.35186004638672, + "memoryEfficiency": 1.6481399536132812, + "cpuCount": 14, + "cpuLoad": 0.13249860491071427, + "platform": "darwin", + "uptime": 4319086 + }, + { + "timestamp": 1755632963583, + "memoryTotal": 25769803776, + "memoryUsed": 25497124864, + "memoryFree": 272678912, + "memoryUsagePercent": 98.94186655680338, + "memoryEfficiency": 1.058133443196624, + "cpuCount": 14, + "cpuLoad": 0.15499441964285715, + "platform": "darwin", + "uptime": 4319116 + }, + { + "timestamp": 1755632993584, + "memoryTotal": 25769803776, + "memoryUsed": 25640550400, + "memoryFree": 129253376, + "memoryUsagePercent": 99.49843088785806, + "memoryEfficiency": 0.5015691121419366, + "cpuCount": 14, + "cpuLoad": 0.17867606026785715, + "platform": "darwin", + "uptime": 4319146 + }, + { + "timestamp": 1755633023585, + "memoryTotal": 25769803776, + "memoryUsed": 25329664000, + "memoryFree": 440139776, + "memoryUsagePercent": 98.29203287760416, + "memoryEfficiency": 1.7079671223958428, + "cpuCount": 14, + "cpuLoad": 0.15506417410714285, + "platform": "darwin", + "uptime": 4319176 + }, + { + "timestamp": 1755633053586, + "memoryTotal": 25769803776, + "memoryUsed": 25427017728, + "memoryFree": 342786048, + "memoryUsagePercent": 98.66981506347656, + "memoryEfficiency": 1.3301849365234375, + "cpuCount": 14, + "cpuLoad": 0.13581194196428573, + "platform": "darwin", + "uptime": 4319206 + }, + { + "timestamp": 1755633083588, + "memoryTotal": 25769803776, + "memoryUsed": 25350651904, + "memoryFree": 419151872, + "memoryUsagePercent": 98.37347666422525, + "memoryEfficiency": 1.626523335774749, + "cpuCount": 14, + "cpuLoad": 0.12785993303571427, + "platform": "darwin", + "uptime": 4319236 + }, + { + "timestamp": 1755633113588, + "memoryTotal": 25769803776, + "memoryUsed": 25331482624, + "memoryFree": 438321152, + "memoryUsagePercent": 98.29909006754556, + "memoryEfficiency": 1.7009099324544366, + "cpuCount": 14, + "cpuLoad": 0.13274274553571427, + "platform": "darwin", + "uptime": 4319266 + }, + { + "timestamp": 1755633143589, + "memoryTotal": 25769803776, + "memoryUsed": 25370427392, + "memoryFree": 399376384, + "memoryUsagePercent": 98.45021565755209, + "memoryEfficiency": 1.5497843424479072, + "cpuCount": 14, + "cpuLoad": 0.11261858258928571, + "platform": "darwin", + "uptime": 4319296 + }, + { + "timestamp": 1755633173591, + "memoryTotal": 25769803776, + "memoryUsed": 25557172224, + "memoryFree": 212631552, + "memoryUsagePercent": 99.17488098144531, + "memoryEfficiency": 0.8251190185546875, + "cpuCount": 14, + "cpuLoad": 0.14198521205357142, + "platform": "darwin", + "uptime": 4319326 + }, + { + "timestamp": 1755633203591, + "memoryTotal": 25769803776, + "memoryUsed": 25592725504, + "memoryFree": 177078272, + "memoryUsagePercent": 99.31284586588541, + "memoryEfficiency": 0.6871541341145928, + "cpuCount": 14, + "cpuLoad": 0.12465122767857142, + "platform": "darwin", + "uptime": 4319356 + }, + { + "timestamp": 1755633233592, + "memoryTotal": 25769803776, + "memoryUsed": 25635733504, + "memoryFree": 134070272, + "memoryUsagePercent": 99.4797388712565, + "memoryEfficiency": 0.5202611287434991, + "cpuCount": 14, + "cpuLoad": 0.117431640625, + "platform": "darwin", + "uptime": 4319386 + }, + { + "timestamp": 1755633263592, + "memoryTotal": 25769803776, + "memoryUsed": 25571426304, + "memoryFree": 198377472, + "memoryUsagePercent": 99.23019409179688, + "memoryEfficiency": 0.769805908203125, + "cpuCount": 14, + "cpuLoad": 0.16399274553571427, + "platform": "darwin", + "uptime": 4319416 + }, + { + "timestamp": 1755633293594, + "memoryTotal": 25769803776, + "memoryUsed": 25405407232, + "memoryFree": 364396544, + "memoryUsagePercent": 98.58595530192056, + "memoryEfficiency": 1.4140446980794366, + "cpuCount": 14, + "cpuLoad": 0.15984235491071427, + "platform": "darwin", + "uptime": 4319446 + }, + { + "timestamp": 1755633323595, + "memoryTotal": 25769803776, + "memoryUsed": 25420562432, + "memoryFree": 349241344, + "memoryUsagePercent": 98.64476521809897, + "memoryEfficiency": 1.3552347819010322, + "cpuCount": 14, + "cpuLoad": 0.14934430803571427, + "platform": "darwin", + "uptime": 4319476 + }, + { + "timestamp": 1755633353596, + "memoryTotal": 25769803776, + "memoryUsed": 25585844224, + "memoryFree": 183959552, + "memoryUsagePercent": 99.28614298502603, + "memoryEfficiency": 0.7138570149739678, + "cpuCount": 14, + "cpuLoad": 0.13766043526785715, + "platform": "darwin", + "uptime": 4319506 + }, + { + "timestamp": 1755633383596, + "memoryTotal": 25769803776, + "memoryUsed": 25560023040, + "memoryFree": 209780736, + "memoryUsagePercent": 99.18594360351562, + "memoryEfficiency": 0.814056396484375, + "cpuCount": 14, + "cpuLoad": 0.11310686383928571, + "platform": "darwin", + "uptime": 4319536 + }, + { + "timestamp": 1755633413597, + "memoryTotal": 25769803776, + "memoryUsed": 25478365184, + "memoryFree": 291438592, + "memoryUsagePercent": 98.86906941731772, + "memoryEfficiency": 1.1309305826822822, + "cpuCount": 14, + "cpuLoad": 0.10989815848214286, + "platform": "darwin", + "uptime": 4319566 + }, + { + "timestamp": 1755633443598, + "memoryTotal": 25769803776, + "memoryUsed": 25289998336, + "memoryFree": 479805440, + "memoryUsagePercent": 98.13810984293619, + "memoryEfficiency": 1.8618901570638116, + "cpuCount": 14, + "cpuLoad": 0.10951450892857142, + "platform": "darwin", + "uptime": 4319596 + }, + { + "timestamp": 1755633473599, + "memoryTotal": 25769803776, + "memoryUsed": 25416122368, + "memoryFree": 353681408, + "memoryUsagePercent": 98.62753550211588, + "memoryEfficiency": 1.372464497884124, + "cpuCount": 14, + "cpuLoad": 0.13804408482142858, + "platform": "darwin", + "uptime": 4319626 + }, + { + "timestamp": 1755633503600, + "memoryTotal": 25769803776, + "memoryUsed": 25099206656, + "memoryFree": 670597120, + "memoryUsagePercent": 97.39774068196616, + "memoryEfficiency": 2.6022593180338447, + "cpuCount": 14, + "cpuLoad": 0.24309430803571427, + "platform": "darwin", + "uptime": 4319656 + }, + { + "timestamp": 1755633533602, + "memoryTotal": 25769803776, + "memoryUsed": 25252151296, + "memoryFree": 517652480, + "memoryUsagePercent": 97.99124399820963, + "memoryEfficiency": 2.008756001790374, + "cpuCount": 14, + "cpuLoad": 0.29966517857142855, + "platform": "darwin", + "uptime": 4319686 + }, + { + "timestamp": 1755633563604, + "memoryTotal": 25769803776, + "memoryUsed": 25273630720, + "memoryFree": 496173056, + "memoryUsagePercent": 98.07459513346353, + "memoryEfficiency": 1.9254048665364678, + "cpuCount": 14, + "cpuLoad": 0.5189383370535714, + "platform": "darwin", + "uptime": 4319716 + }, + { + "timestamp": 1755633593613, + "memoryTotal": 25769803776, + "memoryUsed": 24824987648, + "memoryFree": 944816128, + "memoryUsagePercent": 96.33363087972006, + "memoryEfficiency": 3.6663691202799384, + "cpuCount": 14, + "cpuLoad": 0.41158621651785715, + "platform": "darwin", + "uptime": 4319746 + }, + { + "timestamp": 1755633623615, + "memoryTotal": 25769803776, + "memoryUsed": 25673220096, + "memoryFree": 96583680, + "memoryUsagePercent": 99.62520599365234, + "memoryEfficiency": 0.37479400634765625, + "cpuCount": 14, + "cpuLoad": 0.38009207589285715, + "platform": "darwin", + "uptime": 4319776 + }, + { + "timestamp": 1755633653615, + "memoryTotal": 25769803776, + "memoryUsed": 25653559296, + "memoryFree": 116244480, + "memoryUsagePercent": 99.54891204833984, + "memoryEfficiency": 0.45108795166015625, + "cpuCount": 14, + "cpuLoad": 0.31424386160714285, + "platform": "darwin", + "uptime": 4319806 + }, + { + "timestamp": 1755633683616, + "memoryTotal": 25769803776, + "memoryUsed": 25560743936, + "memoryFree": 209059840, + "memoryUsagePercent": 99.18874104817709, + "memoryEfficiency": 0.8112589518229072, + "cpuCount": 14, + "cpuLoad": 0.25638253348214285, + "platform": "darwin", + "uptime": 4319836 + }, + { + "timestamp": 1755633713618, + "memoryTotal": 25769803776, + "memoryUsed": 25490276352, + "memoryFree": 279527424, + "memoryUsagePercent": 98.91529083251953, + "memoryEfficiency": 1.0847091674804688, + "cpuCount": 14, + "cpuLoad": 0.22593470982142858, + "platform": "darwin", + "uptime": 4319866 + }, + { + "timestamp": 1755633743619, + "memoryTotal": 25769803776, + "memoryUsed": 25497960448, + "memoryFree": 271843328, + "memoryUsagePercent": 98.94510904947916, + "memoryEfficiency": 1.0548909505208428, + "cpuCount": 14, + "cpuLoad": 0.21334402901785715, + "platform": "darwin", + "uptime": 4319896 } ] \ No newline at end of file diff --git a/.claude-flow/metrics/task-metrics.json b/.claude-flow/metrics/task-metrics.json index 0e11afc..a04377f 100644 --- a/.claude-flow/metrics/task-metrics.json +++ b/.claude-flow/metrics/task-metrics.json @@ -1,10 +1,10 @@ [ { - "id": "cmd-hooks-1755632885292", + "id": "cmd-hooks-1755633733484", "type": "hooks", "success": true, - "duration": 4.192417000000006, - "timestamp": 1755632885296, + "duration": 4.695624999999993, + "timestamp": 1755633733488, "metadata": {} } ] \ No newline at end of file diff --git a/backend/src/services/minio.service.js b/backend/src/services/minio.service.js index 61cfe38..932a705 100644 --- a/backend/src/services/minio.service.js +++ b/backend/src/services/minio.service.js @@ -23,20 +23,36 @@ class MinIOService { try { await fs.mkdir(this.tempDir, { recursive: true, mode: 0o755 }); // Test write permissions - const testFile = path.join(this.tempDir, '.write-test'); + const testFile = path.join(this.tempDir, `.write-test-${Date.now()}`); await fs.writeFile(testFile, 'test'); await fs.unlink(testFile); + logger.info(`Using temp directory: ${this.tempDir}`); // Clean up old temp files (older than 1 hour) this.cleanupTempFiles(); } catch (error) { - logger.error('Failed to create or write to temp directory:', error); - // Fallback to node's temp directory - this.tempDir = path.join(os.tmpdir(), 'minio-webui-temp'); + logger.error(`Failed to create or write to temp directory ${this.tempDir}:`, error); + // Try alternative local temp directory + const alternativeTempDir = path.join(process.cwd(), 'temp'); try { - await fs.mkdir(this.tempDir, { recursive: true, mode: 0o755 }); - logger.info(`Using fallback temp directory: ${this.tempDir}`); - } catch (fallbackError) { - logger.error('Failed to create fallback temp directory:', fallbackError); + await fs.mkdir(alternativeTempDir, { recursive: true, mode: 0o755 }); + const testFile = path.join(alternativeTempDir, `.write-test-${Date.now()}`); + await fs.writeFile(testFile, 'test'); + await fs.unlink(testFile); + this.tempDir = alternativeTempDir; + logger.info(`Using alternative temp directory: ${this.tempDir}`); + } catch (altError) { + logger.error('Failed to use alternative temp directory:', altError); + // Last resort: use OS temp directory + this.tempDir = path.join(os.tmpdir(), 'minio-webui-temp'); + try { + await fs.mkdir(this.tempDir, { recursive: true, mode: 0o755 }); + logger.warn(`Using OS temp directory (may have permission issues): ${this.tempDir}`); + } catch (fallbackError) { + logger.error('Failed to create OS temp directory:', fallbackError); + // Use current directory as last resort + this.tempDir = path.join(process.cwd(), '.temp'); + logger.error(`Using current directory for temp files: ${this.tempDir}`); + } } } } diff --git a/docker-compose.yml b/docker-compose.yml index d8aa9a5..e2daf54 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,6 +15,7 @@ services: - "${PORT:-7510}:${PORT:-7510}" volumes: - ./logs:/app/logs + - ./backend/temp:/app/temp:rw - ~/.mc:/home/nodejs/.mc:ro depends_on: - redis diff --git a/docker/Dockerfile.backend b/docker/Dockerfile.backend index 2d10547..e70eb0a 100644 --- a/docker/Dockerfile.backend +++ b/docker/Dockerfile.backend @@ -30,10 +30,11 @@ RUN addgroup -g 1001 -S nodejs && \ adduser -S nodejs -u 1001 # Create necessary directories with proper permissions -RUN mkdir -p logs /tmp/minio-webui-temp && \ +RUN mkdir -p logs temp /tmp/minio-webui-temp && \ chown -R nodejs:nodejs /app && \ chown nodejs:nodejs /tmp/minio-webui-temp && \ - chmod 755 logs /tmp/minio-webui-temp + chmod 755 logs temp /tmp/minio-webui-temp && \ + chmod 755 /app/temp # Switch to non-root user USER nodejs