Docker容器无法启动。 收到以下错误消息
我以前曾尝试在777上设置build
,但它什么也没有改变。
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-compose.yml
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
要启动docker容器,请使用docker-compose up -d
答案 0 :(得分:1)
我想我也会把评论作为正式答案
因此,在docker-compose.yml文件中,您已定义希望以user: "1000:1000"
的身份运行服务调度程序,但是在装入卷后,所有者实际上是root:root
。
我相信这是Linux特定的问题,因为当所有者成为拥有docker守护程序的用户时,安装卷时具有权限(至少我多次遇到过此问题)
据我所知,在Mac上的Docker Desktop上不会发生此问题,并且已使用指定用户作为所有者挂载了卷。
因此,删除该服务的用户定义将解决此问题。
答案 1 :(得分:0)
错误报告脚本正在尝试打开文件,并且没有打开该文件的权限。
鉴于该文件位于build
目录中,以及堆栈跟踪中的详细信息,我猜测您的脚本正在尝试将该文件写入。
最可能的情况是容器中没有build
目录,并且您没有编写任何代码来创建build
目录。由于您使用make
来控制构建,并且没有包含Makefile
,因此很难确定。
查看您的构建文件,并确保直接创建输出(如果缺少)。您可能还需要确保每次运行完整版本时都清除其内容。