You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js React应用Docker部署遇权限被拒问题求助

Next.js 部署权限错误解决方案

问题重现

部署Next.js应用至amd64架构Linux VPS时,触发如下权限拒绝错误:

[Error: EACCES: permission denied, scandir '/app/public/Fruitopia_illustrations'] {
errno: -13,
code: 'EACCES',
syscall: 'scandir',
path: '/app/public/Fruitopia_illustrations'
}

添加COPY --chown=nextjs:nodejs --from=builder /app/public ./public指令后,问题仍未解决。

核心原因

你的Dockerfile中存在重复的COPY指令:

COPY --from=builder /app/public ./public
COPY --chown=nextjs:nodejs --from=builder /app/public ./public

第一条指令会以root权限将文件复制到镜像,此时/app/public及子目录(包括Fruitopia_illustrations)的所有者为root。第二条指令虽然指定了--chown,但Docker仅会覆盖文件内容,不会修改已存在目录的权限,导致nextjs用户仍无读取目录的权限。

修复方案

方案1:移除无权限设置的重复COPY

直接删除第一条未带--chown的COPY指令,仅保留带权限配置的版本:

# 移除这一行:COPY --from=builder /app/public ./public
COPY --chown=nextjs:nodejs --from=builder /app/public ./public

方案2:强制递归修改目录权限

如果方案1无效,可在复制文件后,手动递归修改/app/public目录的所有者:

COPY --from=builder /app/public ./public
RUN chown -R nextjs:nodejs /app/public

方案3:在构建阶段提前修正权限

在builder阶段复制本地文件后,先调整public/Fruitopia_illustrations的权限,确保后续复制到runner阶段时权限正确:

# 在builder阶段的COPY . .之后添加:
RUN chown -R node:node /app/public/Fruitopia_illustrations

额外验证点

  • 检查本地开发环境中public/Fruitopia_illustrations的权限,避免因本地权限问题导致镜像中权限继承异常
  • 运行容器时,不要挂载宿主机目录覆盖/app/public,否则会使用宿主机的权限配置

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:15:13