【发布时间】:2022-12-16 05:58:31
【问题描述】:
我有一个 MERN 堆栈应用程序。我在渲染云上部署了应用程序。我注意到我的图片上传功能不起作用,但可以在本地机器上使用。我“码头化”了节点应用程序。 我尝试上传图片时收到的错误消息是这样的:
Error: EACCES: permission denied, open 'images/1666890887146download.png'
首先,我使用multernpm 包来处理图片上传。该图像保存在我的api 项目文件夹中名为image 的文件夹中。我认为由于 dockerfile 中的用户访问,这就是访问被拒绝的原因。
这是我的码头文件:
FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
COPY client/package*.json client/
RUN npm run install-client --only=production
COPY api/package*.json api/
RUN npm run install-api --only=production
COPY client/ client/
RUN npm run client-build --prefix client
COPY api/ api/
USER node
CMD [ "npm", "start", "--prefix", "api" ]
EXPOSE 5000
这是我的multer图片上传功能:
const ALLOWED_FORMATS = ['image/jpeg', 'image/png', 'image/jpg'];
//login to upload images using libery called multer
const storage = multer.diskStorage({//choosing destination of the file
destination:(req, file, cb) =>{
if(ALLOWED_FORMATS.includes(file.mimetype)){
cb(null, "./images")
}else{
cb(new Error('Not supported file type!'), false)
}
}, filename:(req, file,cb)=> {//choosing file name
cb(null, req.body.name)
}
});
const upload = multer({storage:storage})
我感觉到我在dockerfile 中分配的node 用户无权读取和写入image 文件夹中的文件。我的逻辑依赖于此,因为在将图像从 image 文件夹上传到 cloudinary 后,我也立即将其删除。
有没有办法可以分配node用户在图像文件夹中读取和写入文件的权限?我对docker不太熟悉。
【问题讨论】:
标签: node.js docker docker-compose dockerfile