Docker Error: EACCES: permission denied, mkdir
Docker Error: EACCES: permission denied, mkdir
我尝试在我的 docker 容器中为 Puppeteer
安装和创建用户。但是我得到了 ERROR
关于 mkdir
的用户权限。
这是我的 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
这是因为您使用了 2 个图像作为生成器,另一个图像用于 运行ner。
因此,当您将 build
文件夹从构建器复制到 运行ner 时,权限不会保留在两个容器上。
如果您使用 1 张图像作为给定的 link,它将 运行 成功,不会出现您上面提到的错误。
仅 FROM alpine
。
我尝试在我的 docker 容器中为 Puppeteer
安装和创建用户。但是我得到了 ERROR
关于 mkdir
的用户权限。
这是我的 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
这是因为您使用了 2 个图像作为生成器,另一个图像用于 运行ner。
因此,当您将 build
文件夹从构建器复制到 运行ner 时,权限不会保留在两个容器上。
如果您使用 1 张图像作为给定的 link,它将 运行 成功,不会出现您上面提到的错误。
仅FROM alpine
。