Node.js 错误:EACCESS:权限被拒绝,打开';build/FILENAME.js';
Docker容器无法启动。 收到以下错误消息 我之前曾尝试在777上设置Node.js 错误:EACCESS:权限被拒绝,打开';build/FILENAME.js';,node.js,docker,docker-compose,Node.js,Docker,Docker Compose,Docker容器无法启动。 收到以下错误消息 我之前曾尝试在777上设置构建,但它没有任何改变 package.json "scripts": { "start": "nodemon --exec babel-node src/main.js", "build": "babel src --out-dir build", ... 日志 $ babel src --out-dir build dispatcher_1 | { Error: EACCES: permis
构建
,但它没有任何改变
package.json
"scripts": {
"start": "nodemon --exec babel-node src/main.js",
"build": "babel src --out-dir build",
...
日志
$ babel src --out-dir build
dispatcher_1 | { Error: EACCES: permission denied, open 'build/CalcUtil.js'
dispatcher_1 | at Object.openSync (fs.js:439:3)
dispatcher_1 | at Object.writeFileSync (fs.js:1190:35)
dispatcher_1 | at outputFileSync (/app/node_modules/output-file-sync/index.js:115:5)
dispatcher_1 | at /app/node_modules/@babel/cli/lib/babel/dir.js:117:41
dispatcher_1 | at Generator.next (<anonymous>)
dispatcher_1 | at asyncGeneratorStep (/app/node_modules/@babel/cli/lib/babel/dir.js:74:103)
dispatcher_1 | at _next (/app/node_modules/@babel/cli/lib/babel/dir.js:76:194)
dispatcher_1 | errno: -13,
dispatcher_1 | syscall: 'open',
dispatcher_1 | code: 'EACCES',
dispatcher_1 | path: 'build/CalcUtil.js' }
要启动docker容器,我使用docker compose up-d错误报告脚本正在尝试打开一个文件,并且没有打开该文件的权限 考虑到所讨论的文件位于
build
目录以及堆栈跟踪中的详细信息,我猜您的脚本正在尝试写入该文件
这里最可能的情况是,容器中没有build
目录,并且您还没有编写任何代码来创建build
目录。由于您正在使用make
来控制构建,而且还没有包含Makefile
,因此很难确定
查看构建文件,确保直接创建输出(如果缺少)。您可能还希望确保在运行完整生成时清除其内容。错误报告脚本正在尝试打开文件,但没有打开该文件的权限 考虑到所讨论的文件位于
build
目录以及堆栈跟踪中的详细信息,我猜您的脚本正在尝试写入该文件
这里最可能的情况是,容器中没有build
目录,并且您还没有编写任何代码来创建build
目录。由于您正在使用make
来控制构建,而且还没有包含Makefile
,因此很难确定
查看构建文件,确保直接创建输出(如果缺少)。您可能还希望确保在运行完整版本时清除其内容。我想我也会将此评论作为正式答案 因此,在docker-compose.yml文件中,您定义了希望以
用户:“1000:1000”
的身份运行服务调度程序,但当您装入卷时,所有者实际上是root:root
我认为这是一个Linux特有的问题,当所有者成为docker守护进程的所有者时,在装载卷时会出现权限问题(至少我在多个场合遇到过这种情况)
据我所知,Docker Desktop for Mac上没有出现此问题,卷是以指定用户作为所有者装入的
因此,删除该服务的用户定义将解决这个问题。我想我也会将该评论作为一个官方答案 因此,在docker-compose.yml文件中,您定义了希望以
用户:“1000:1000”
的身份运行服务调度程序,但当您装入卷时,所有者实际上是root:root
我认为这是一个Linux特有的问题,当所有者成为docker守护进程的所有者时,在装载卷时会出现权限问题(至少我在多个场合遇到过这种情况)
据我所知,Docker Desktop for Mac上没有出现此问题,卷是以指定用户作为所有者装入的
因此,删除该服务的用户定义将解决此问题。请提供Dockerfile和/或docker-compose.yml或所需的命令using@KārlisĀbele我只需使用
docker compose up-d
启动docker容器。@markovchaindocker compose.yml
在上面。请尝试运行docker-compose运行dispatcher sh
并检查您遇到问题的文件的所有者,以及该文件是否与您所使用的用户相同,但在docker-compose.yml中,您的用户为1000:1000,但不是root请提供Dockerfile和/或docker-compose.yml或您正在使用的命令using@KārlisĀbele I仅使用docker compose up-d
启动docker容器。@markovchaindocker compose.yml
在上面。尝试运行docker compose运行dispatcher sh
,检查您遇到问题的文件的所有者是什么,以及该文件是否与您被发送到的用户相同,但在docker-compose.yml中,您需要具有非根用户的用户1000:1000
version: '3.1'
volumes:
db:
services:
mongodb:
image: mongo:4.0-xenial
restart: always
volumes:
- db:/data/db
mongoclient:
image: mongoclient/mongoclient
restart: always
volumes:
- db:/data/db
environment:
- MONGO_URL=mongodb://mongodb/data
- MONGOCLIENT_DEFAULT_CONNECTION_URL=mongodb://mongodb/data
ports:
- "8071:3000"
depends_on:
- mongodb
dispatcher:
image: node:10
restart: always
volumes:
- ./tmp:/upload_tmp
- ./:/app
working_dir: /app
ports:
- "8070:8070"
command: "make build start"
user: "1000:1000"
depends_on:
- mongodb