From 382efff867d79a6f39cf421c9da67bd00abc8126 Mon Sep 17 00:00:00 2001 From: shaw Date: Sat, 19 Jul 2025 02:48:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=AE=80=E5=8C=96=E4=B8=BAroot=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=BF=90=E8=A1=8C=EF=BC=8C=E5=BD=BB=E5=BA=95=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=9D=83=E9=99=90=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除claude用户创建,直接使用root用户运行 - 删除所有复杂的权限设置和chown操作 - 恢复简单的sed命令修改配置文件 - 移除调试权限信息输出 - 简化Dockerfile,减少构建复杂度 - 确保所有文件操作都有完整权限 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- Dockerfile | 24 ++++++------------------ docker-entrypoint.sh | 34 ++++------------------------------ 2 files changed, 10 insertions(+), 48 deletions(-) diff --git a/Dockerfile b/Dockerfile index c4b0e70d..78d022fd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,10 +13,6 @@ RUN apk add --no-cache \ sed \ && rm -rf /var/cache/apk/* -# 👤 创建应用用户 -RUN addgroup -g 1001 -S nodejs && \ - adduser -S claude -u 1001 -G nodejs - # 📁 设置工作目录 WORKDIR /app @@ -28,30 +24,22 @@ RUN npm ci --only=production && \ npm cache clean --force # 📋 复制应用代码 -COPY --chown=claude:nodejs . . +COPY . . # 🔧 复制并设置启动脚本权限 -COPY --chown=claude:nodejs docker-entrypoint.sh /usr/local/bin/ +COPY docker-entrypoint.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/docker-entrypoint.sh -# 📁 创建必要目录并设置权限 - 一次性解决所有权限问题 -RUN mkdir -p logs data temp && \ - chown -R claude:nodejs /app && \ - chmod 775 /app && \ - chmod 775 /app/logs /app/data /app/temp /app/config +# 📁 创建必要目录 +RUN mkdir -p logs data temp -# 🔧 预先创建配置文件避免权限问题 +# 🔧 预先创建配置文件 RUN if [ ! -f "/app/config/config.js" ] && [ -f "/app/config/config.example.js" ]; then \ cp /app/config/config.example.js /app/config/config.js; \ fi && \ if [ ! -f "/app/.env" ] && [ -f "/app/.env.example" ]; then \ cp /app/.env.example /app/.env; \ - fi && \ - chown claude:nodejs /app/config/config.js /app/.env 2>/dev/null || true && \ - chmod 664 /app/config/config.js /app/.env 2>/dev/null || true - -# 🔐 切换到非 root 用户 -USER claude + fi # 🌐 暴露端口 EXPOSE 3000 diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index f1409cea..1f29f3f3 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -44,32 +44,10 @@ if [ -f "/app/.env" ]; then fi fi - # 使用更安全的方式更新 .env 文件 - 创建临时文件避免sed权限问题 - ENV_TEMP="/tmp/env_temp_$$" - - # 替换JWT_SECRET - awk -v new_secret="$JWT_SECRET" ' - /^JWT_SECRET=/ { print "JWT_SECRET=" new_secret; next } - { print } - ' /app/.env > "$ENV_TEMP" - - # 替换ENCRYPTION_KEY - awk -v new_key="$ENCRYPTION_KEY" ' - /^ENCRYPTION_KEY=/ { print "ENCRYPTION_KEY=" new_key; next } - { print } - ' "$ENV_TEMP" > "$ENV_TEMP.2" - - # 替换REDIS_HOST - awk ' - /^REDIS_HOST=/ { print "REDIS_HOST=redis"; next } - { print } - ' "$ENV_TEMP.2" > "$ENV_TEMP.3" - - # 复制回原文件 - cp "$ENV_TEMP.3" /app/.env - - # 清理临时文件 - rm -f "$ENV_TEMP" "$ENV_TEMP.2" "$ENV_TEMP.3" + # 直接使用sed修改.env文件 - root用户无权限问题 + sed -i "s/JWT_SECRET=.*/JWT_SECRET=${JWT_SECRET}/" /app/.env + sed -i "s/ENCRYPTION_KEY=.*/ENCRYPTION_KEY=${ENCRYPTION_KEY}/" /app/.env + sed -i "s/REDIS_HOST=.*/REDIS_HOST=redis/" /app/.env echo "✅ .env 已配置" else @@ -85,10 +63,6 @@ export ENCRYPTION_KEY if [ ! -f "/app/data/init.json" ]; then echo "📋 首次启动,执行初始化设置..." - # 调试权限信息 - echo "🔍 当前用户: $(whoami)" - echo "🔍 data 目录权限: $(ls -ld /app/data 2>/dev/null || echo 'directory not found')" - echo "🔍 data 目录内容: $(ls -la /app/data 2>/dev/null || echo 'directory empty or not accessible')" # 如果设置了环境变量,显示提示 if [ -n "$ADMIN_USERNAME" ] || [ -n "$ADMIN_PASSWORD" ]; then