如何使用 multer 在 docker 中写入和读取文件

发布于 2025-01-17 06:09:29 字数 1588 浏览 3 评论 0原文

我正在使用 multer 将上传文件保存到特定目录。 我在本地工作得并不完美,但是当我使用 docker 构建时,multer 不会将文件写入我的文件夹中。

是我的 multer 代码:

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, __basedir + "/uploads/")
  },
  filename: (req, file, cb) => {
    cb(null, file.originalname)
  }
})

我决定在 docker-compose 中使用卷,如下所示:

volumes:
      - ./uploads:/app/uploads

和错误错误:EACCES:权限被拒绝,打开'/app/uploads/Funder Statement Test data.xlsx'

这 是我的 dockerFile:

FROM node:fermium-alpine

RUN apk add --no-cache \
      chromium \
      nss \
      freetype \
      harfbuzz \
      ca-certificates \
      ttf-freefont \
      nodejs \
      yarn

# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
    PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

# Puppeteer v10.0.0 works with Chromium 92.
RUN yarn add [email protected]

# Add user so we don't need --no-sandbox.
RUN addgroup -S pptruser && adduser -S -G pptruser pptruser \
    && mkdir -p /home/pptruser/Downloads /app \
    && chown -R pptruser:pptruser /home/pptruser \
    && chown -R pptruser:pptruser /app 

# Run everything after as non-privileged user.
USER pptruser

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3030

CMD ["npm", "start"]


知道如何解决我的错误吗?

I'm using multer to save upload file to specific directory.
I'ts working perfect in local, but when I build using docker, the multer isn't write the file in my folder.

this is my multer code :

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, __basedir + "/uploads/")
  },
  filename: (req, file, cb) => {
    cb(null, file.originalname)
  }
})

and i decided to using volumes in docker-compose like this :

volumes:
      - ./uploads:/app/uploads

and error Error: EACCES: permission denied, open '/app/uploads/Funder Statement Test data.xlsx'

this is my dockerFile :

FROM node:fermium-alpine

RUN apk add --no-cache \
      chromium \
      nss \
      freetype \
      harfbuzz \
      ca-certificates \
      ttf-freefont \
      nodejs \
      yarn

# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
    PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

# Puppeteer v10.0.0 works with Chromium 92.
RUN yarn add [email protected]

# Add user so we don't need --no-sandbox.
RUN addgroup -S pptruser && adduser -S -G pptruser pptruser \
    && mkdir -p /home/pptruser/Downloads /app \
    && chown -R pptruser:pptruser /home/pptruser \
    && chown -R pptruser:pptruser /app 

# Run everything after as non-privileged user.
USER pptruser

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3030

CMD ["npm", "start"]


Any idea how to solve my error ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自找没趣 2025-01-24 06:09:29

运行 Docker 容器的用户可能没有写入映射文件夹 ./uploads 的权限。确保权限正确。

The user under which the Docker container is running likely has no permission to write into the mapped folder ./uploads. Make sure, the permissions are correct.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文