我尝试使用Docker卷(-)运行一个Node项目容器。
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'
使用的构建命令(该应用程序是一个示例 react-app)-
docker build -f Dockerfile.dev -t batzu/frontend .
我的Dockerfile.dev -
FROM node:alpine
WORKDIR /myapp
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "run", "start"]
package.json
是React项目生成的文件-
{
"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'
而没有任何权限错误。我无法理解
-v /myapp/node_modules
在docker运行中到底是做什么的,因为我被告知它应该在我们将工作目录映射到容器的/myapp/目录之前,对node_modules
文件夹进行类似书签的操作。为什么这会导致错误?有人能指向我正确的方向或解释我做错了什么或者有什么修复方法吗......?
先谢谢大家了 :)
npm run start
是做什么的?请在问题中附上package.json
脚本部分。 - Max${cwd}
值,而是使用普通的文件夹,例如/foo/bar
。 - Max