当前位置: 首页 > 知识库问答 >
问题:

当尝试在节点项目中使用docker卷时,权限被拒绝

司马彦
2023-03-14

我试图使用docker卷和-

docker run -p 3000:3000 -v /myapp/node_modules -v $(pwd):/myapp batzu/frontend 

得到了一个错误-

EACCES: permission denied, mkdir '/myapp/node_modules/.cache'

但是当我尝试运行没有-v标志的相同容器时-

docker run -p 3000:3000 batzu/frontend

容器启动正常,没有错误。

第一个docker运行日志-

> frontend@0.1.0 start
> react-scripts start

ℹ 「wds」: Project is running at http://172.17.0.2/
ℹ 「wds」: webpack output is served from 
ℹ 「wds」: Content not from webpack is served from /myapp/public
ℹ 「wds」: 404s will fallback to /
Starting the development server...

Failed to compile.

EACCES: permission denied, mkdir '/myapp/node_modules/.cache'

使用了Build命令(该应用程序是一个示例react应用程序)-

docker build -f Dockerfile.dev -t batzu/frontend .

我的Dockerfile。开发-

FROM node:alpine

WORKDIR /myapp

COPY package.json .
RUN npm install
COPY . .

CMD ["npm", "run", "start"]

package.json由反应项目生成的文件-

{
  "name": "frontend",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.11.9",
    "@testing-library/react": "^11.2.5",
    "@testing-library/user-event": "^12.7.1",
    "react": "^17.0.1",
    "react-dom": "^17.0.1",
    "react-scripts": "4.0.2",
    "web-vitals": "^1.1.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

我试图将sh插入容器并从中执行npm run start,但得到了相同的错误,即使我能够在没有任何权限错误的情况下从shell执行mkdir'/myapp/node_modules/. cache'。我无法理解docker运行中的-v /myapp/node_modules到底做了什么,因为我被告知它应该在我们将工作目录映射到容器的 /myapp/dir之前对node_modules文件夹进行书签排序。为什么这会导致错误??

有没有人能给我指出正确的方向,或者解释一下我做错了什么,或者解决了什么问题。。。。?

非常感谢提前:)

共有3个答案

卫俊誉
2023-03-14

在Dockerfile中。dev添加一行

RUN chmod 777 node_modules

现在是Dockerfile。开发人员如下:-

FROM node:alpine
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
RUN chmod 777 node_modules
CMD ["npm","run","start"]
萧升
2023-03-14

所以,我从环顾四周并看到其他人的Dockerfile和我容器中bash终端中的一些运行命令中收集到的是,我用作base的node: alpin映像创建了一个名为node的用户在容器内。

npm run start是作为node用户的进程执行的(带有node的UID的进程),它没有根权限(我在查看htop时发现),因此为了使node用户成为/app目录的所有者,我在docker文件中添加了这个-

RUN chown -R node.node /app

更新的Dockerfile。dev是-

FROM node:alpine

WORKDIR '/app'

COPY package.json .
RUN npm install
RUN chown -R node.node /app

COPY . .

CMD ["npm", "run", "start"]

这已经解决了我的问题,希望它也能帮助其他人。:)

韩阳飙
2023-03-14

你的Dockerfile。dev应该如您在下面看到的那样,请注意,复制将代表节点用户执行,而WORKDIR应该是主节点(有关更多信息,请参阅https://github.com/nodejs/docker-node/issues/740#issuecomment-458545074):

FROM node:alpine

WORKDIR /home/node/app
RUN chown -R node:node /home/node/app

COPY --chown=node:node package.json .

RUN npm install

COPY --chown=node:node . .

# At the end, set the user to use when running this image
USER node

CMD npm run start

注意,如果引入docker compose,它将同时适用于docker和CLI。包含测试覆盖服务的yml文件。

 类似资料:
  • 问题内容: 我为此付出了一切,所以希望你们能帮助我。在带有docker-machine的OSX 10.11.2中,我有一个docker- compose文件,该文件应构建一个本地Dockerfile并将MySQL容器附加到该文件。MySQL容器应该在我存储数据库数据的地方安装一个本地文件夹,因此,如果容器或VM关闭,我可以重新启动它而不会丢失数据。问题是,当我运行它时,它将引发权限错误: 我已经尝

  • 有趣的是,当我尝试它下载的sudo版本时,但是终端中不能识别。 我的节点是10.16。我的净现值是6.9。0 这是文件问题还是我的Mac?

  • 问题内容: 我想编写一个响应S3 put事件的处理程序,以将上载到mp4的任何avi文件转换为。我使用AWS工具包插件在Java中,Eclipse中进行了此操作。对于视频转换,我将ffmpeg与ffmpeg- cli-wrapper一起使用 ,并且在源代码树中提供了ffmpeg的静态(Linux)二进制文件。 我发现上载函数时,二进制文件被放入,但是当我尝试使用编写的测试函数时,出现“权限被拒绝”

  • 问题内容: 我正在尝试在Macbook中运行Jenkins管道作业。我也有本地运行的docker实例。最初,我在运行Jenkins Job时遇到“ 找不到docker命令 ”错误。我通过添加符号链接“ ln -f -s /Applications/Docker.app/Contents/Resources/bin/* / usr / local / bin ” 解决了该错误 我还应用了这两个更改,

  • 所以我可以在没有sudo的情况下运行docker命令,但是同样的错误也出现在和logout/login和reboot上。 是因为Docker还是Gradle?