【问题标题】:Docker Error: EACCES: permission denied, mkdirDocker 错误:EACCES:权限被拒绝,mkdir
【发布时间】:2021-10-02 23:03:56
【问题描述】:

我尝试在我的 docker 容器中为Puppeteer 安装和创建用户。但是我得到了一个关于mkdir 的用户权限的ERROR。 这是我的Dockerfile

FROM node:14-alpine AS builder
WORKDIR /app
COPY backend/package.json backend/package-lock.json ./
RUN npm install

COPY backend/src/ ./src
COPY backend/.env ./
COPY backend/.babelrc ./
RUN mkdir -p build/src
RUN npm run build

FROM node:alpine AS runner
WORKDIR /app

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

ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
    PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

RUN npm install puppeteer@10.0.0

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 groupadd -r pptruser && useradd -r -g pptruser  \
#     && mkdir -p /home/pptruser/Downloads /app \
#     && chown -R pptruser:pptruser /home/pptruser \
#     && chown -R pptruser:pptruser /app

USER pptruser
# USER root

COPY --from=builder /app/package.json ./
COPY --from=builder /app/package-lock.json ./
COPY --from=builder /app/.env ./
COPY --from=builder /app/build ./build
COPY --from=builder /app/node_modules ./node_modules

EXPOSE 8081

CMD ["node", "build/src/index.js"]

我使用 addgroup 和 adduser 创建用户。我关注了这份文件https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md#running-puppeteer-in-docker。 我得到了一个错误:

backend    | Error: EACCES: permission denied, mkdir '/app/build/src/services/csv'
backend    |     at Object.mkdirSync (node:fs:1334:3)
backend    |     at Object.<anonymous> (/app/build/src/services/download.js:36:16)
backend    |     at Module._compile (node:internal/modules/cjs/loader:1101:14)
backend    |     at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
backend    |     at Module.load (node:internal/modules/cjs/loader:981:32)
backend    |     at Function.Module._load (node:internal/modules/cjs/loader:822:12)
backend    |     at Module.require (node:internal/modules/cjs/loader:1005:19)
backend    |     at require (node:internal/modules/cjs/helpers:102:18)
backend    |     at Object.<anonymous> (/app/build/src/services/index.js:11:17)
backend    |     at Module._compile (node:internal/modules/cjs/loader:1101:14) {
backend    |   errno: -13,
backend    |   syscall: 'mkdir',
backend    |   code: 'EACCES',
backend    |   path: '/app/build/src/services/csv'
backend    | }

我的函数我得到了Error

const csvFolder = path.join(__dirname, "csv");
if (!fs.existsSync(csvFolder)) {
  fs.mkdirSync(csvFolder);
}

但是当我使用:USER root。我没有收到此错误。 我的目录树:

|-src
| |-services
| |-routes
| |-controllers
|-docker
| |-Dockerfile.backend

【问题讨论】:

    标签: node.js linux docker puppeteer


    【解决方案1】:

    这是因为您使用 2 张图片作为构建器,另一张用于跑步者。

    因此,当您将 build 文件夹从构建器复制到运行器时,权限不会保留在两个容器上。

    如果您使用 1 张图片作为给定的链接,它将成功运行而不会出现上述错误。

    仅限FROM alpine

    【讨论】:

    • 我是 docker 新手,代码来自我的领导。他放开了那个。所以我觉得没问题。我可以问你一个问题吗?我的项目需要在运行之前构建。所以我使用builder和runner。如果我必须更改该 dockerfile。你能给我任何解决方案吗?谢谢
    • 嗨@HuỳnhMinhTrí,你解决了这个问题吗?我遇到了同样的问题,因为我正在尝试使用 puppeteer,并且需要在第 2 阶段复制构建文件夹,但出现错误 EACCES: permission denied, unlink '/app/build/3bc629d5f743a1772f7a775c5f5fb0c1.js'。尝试仅使用 1 张图片但仍无法正常工作
    猜你喜欢
    • 2019-10-28
    • 1970-01-01
    • 2019-09-19
    • 2016-05-14
    • 2018-03-01
    • 2022-07-12
    • 2021-07-15
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多