【问题标题】:Access denied issue in docker container node applicationdocker 容器节点应用程序中的访问被拒绝问题
【发布时间】: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


    【解决方案1】:

    是的,您可以将节点用户添加到 sudo 组...

    sudo usermod -aG sudo $USER

    或者您可以使用类似的方式向用户授予权限

    chown -R $USER:$USER images/

    【讨论】:

    • 感谢您的帮助,这行代码会出现在哪里
    • 在 Dockerfile 中的 USER node 命令之后添加这个
    猜你喜欢
    • 2020-03-17
    • 2018-02-07
    • 2019-10-05
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多