Docker部署于DigitalOcean的Node.js应用上传图片遇EACCES权限错误求助
解决Node.js Docker部署在DigitalOcean的上传目录权限问题
错误原因
Error: EACCES: permission denied, open 'uploads /9d607de9b2483a9e92120979cfca666f' 是因为容器内运行Node进程的用户没有uploads目录的读写权限,另外路径中uploads后存在空格,大概率是代码路径拼接错误导致的无效路径。
解决方案
1. 修正Dockerfile的权限配置
构建镜像时提前创建uploads目录,将权限赋予Node进程默认使用的node用户(多数官方Node镜像自带该用户):
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install # 创建uploads目录并修改归属为node用户 RUN mkdir -p uploads && chown -R node:node uploads # 切换到node用户运行应用,规避root权限风险 USER node COPY . . CMD ["node", "app.js"]
2. 检查卷挂载权限(若使用外部卷)
如果uploads目录挂载到了DigitalOcean块存储或宿主机目录,需确保宿主机侧目录权限匹配容器内node用户的UID(通常为1000):
# 在DigitalOcean宿主机执行 sudo mkdir -p /your/host/uploads/path sudo chown -R 1000:1000 /your/host/uploads/path
3. 修复代码路径拼接错误
错误路径里uploads后有空格,检查应用代码中生成上传路径的逻辑:
- 错误写法:
path.join('uploads ', filename) - 正确写法:
path.join('uploads', filename)
内容的提问来源于stack exchange,提问作者Anicet
相关产品推荐
相关产品推荐

