我试图使用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
文件夹进行书签排序。为什么这会导致错误??
有没有人能给我指出正确的方向,或者解释一下我做错了什么,或者解决了什么问题。。。。?
非常感谢提前:)
在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"]
所以,我从环顾四周并看到其他人的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"]
这已经解决了我的问题,希望它也能帮助其他人。:)
你的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?