Docker EACCES 权限被拒绝 mkdir
Docker EACCES permission denied mkdir
我的朋友给了我一个带有 docker 文件的项目,这对他来说似乎工作得很好,但我遇到了权限错误。
FROM node:alpine
RUN mkdir -p /usr/src/node-app && chown -R node:node /usr/src/node-app
WORKDIR /usr/src/node-app
COPY package.json yarn.lock ./
COPY ./api/package.json ./api/
COPY ./iso/package.json ./iso/
USER node
RUN yarn install --pure-lockfile
COPY --chown=node:node . .
EXPOSE 3000
error An unexpected error occurred: "EACCES: permission denied, mkdir '/usr/src/node-app/node_modules/<project_name>/api/node_modules'".
会不会是docker版本错误?
COPY
通常将内容复制到 root 拥有的映像中,如果目录不存在,它将在映像中创建目录。特别是,当您 COPY ./api/package.json ./api/
时,它会创建 root 拥有的 api
子目录,而当您稍后尝试 运行 yarn install
时,它无法创建 [=15] =] 子目录,因为您已切换用户。
我建议将文件复制到容器中并运行以 root 身份执行构建过程。不要 chown
任何东西;将所有这些文件保留为 root 所有。仅在 Dockerfile 的末尾切换到备用 USER
,您在其中声明 CMD
。这意味着 non-root 用户 运行 将无法有意或无意地修改容器中的代码或库,这通常是一种良好的安全做法。
FROM node:alpine
# Don't RUN mkdir; WORKDIR creates the directory if it doesn't exist
WORKDIR /usr/src/node-app
# All of these files and directories are owned by root
COPY package.json yarn.lock ./
COPY ./api/package.json ./api/
COPY ./iso/package.json ./iso/
# Run this installation command still as root
RUN yarn install --pure-lockfile
# Copy in the rest of the application, still as root
COPY . .
# RUN yarn build
# Declare how to run the container -- _now_ switch to a non-root user
EXPOSE 3000
USER node
CMD yarn start
我的朋友给了我一个带有 docker 文件的项目,这对他来说似乎工作得很好,但我遇到了权限错误。
FROM node:alpine
RUN mkdir -p /usr/src/node-app && chown -R node:node /usr/src/node-app
WORKDIR /usr/src/node-app
COPY package.json yarn.lock ./
COPY ./api/package.json ./api/
COPY ./iso/package.json ./iso/
USER node
RUN yarn install --pure-lockfile
COPY --chown=node:node . .
EXPOSE 3000
error An unexpected error occurred: "EACCES: permission denied, mkdir '/usr/src/node-app/node_modules/<project_name>/api/node_modules'".
会不会是docker版本错误?
COPY
通常将内容复制到 root 拥有的映像中,如果目录不存在,它将在映像中创建目录。特别是,当您 COPY ./api/package.json ./api/
时,它会创建 root 拥有的 api
子目录,而当您稍后尝试 运行 yarn install
时,它无法创建 [=15] =] 子目录,因为您已切换用户。
我建议将文件复制到容器中并运行以 root 身份执行构建过程。不要 chown
任何东西;将所有这些文件保留为 root 所有。仅在 Dockerfile 的末尾切换到备用 USER
,您在其中声明 CMD
。这意味着 non-root 用户 运行 将无法有意或无意地修改容器中的代码或库,这通常是一种良好的安全做法。
FROM node:alpine
# Don't RUN mkdir; WORKDIR creates the directory if it doesn't exist
WORKDIR /usr/src/node-app
# All of these files and directories are owned by root
COPY package.json yarn.lock ./
COPY ./api/package.json ./api/
COPY ./iso/package.json ./iso/
# Run this installation command still as root
RUN yarn install --pure-lockfile
# Copy in the rest of the application, still as root
COPY . .
# RUN yarn build
# Declare how to run the container -- _now_ switch to a non-root user
EXPOSE 3000
USER node
CMD yarn start