【发布时间】:2020-05-04 19:17:05
【问题描述】:
我有一个 NodeJS(版本 8)应用程序,我正试图在 Docker 本地运行。
使用时
docker-compose up
构建后,我收到此错误:
app_1 | /app/backend/node_modules/.bin/node: 1: /app/backend/node_modules/.bin/node: �����H: not found
app_1 | /app/backend/node_modules/.bin/node: 2: /app/backend/node_modules/.bin/node: ���H__PAGEZERO__TEXT: not found
app_1 | /app/backend/node_modules/.bin/node: 3: /app/backend/node_modules/.bin/node: Y.__dof_node__TEXT�c.�c.__unwind_info__TEXT�l.�L�l.__eh_frame__TEXTP�/dP�__DATA: not found
app_1 | /app/backend/node_modules/.bin/node: 4: /app/backend/node_modules/.bin/node: Syntax error: "(" unexpected
app_1 | npm ERR! code ELIFECYCLE
app_1 | npm ERR! errno 2
app_1 | npm ERR! app-backend@ start:production: `cross-env NODE_ENV=production nodemon ./server.js`
app_1 | npm ERR! Exit status 2
尝试使用 docker run --rm -it my_app sh 直接运行容器并尝试使用cd backend && npm run start:production
我犯了同样的错误。调试日志说:
0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node',
1 verbose cli '/usr/local/bin/npm',
1 verbose cli 'run',
1 verbose cli 'start:production' ]
2 info using npm@6.13.4
3 info using node@v8.17.0
4 verbose run-script [ 'prestart:production',
4 verbose run-script 'start:production',
4 verbose run-script 'poststart:production' ]
5 info lifecycle app-backend@~prestart:production: app-backend@
6 info lifecycle app-backend@~start:production: app-backend@
7 verbose lifecycle app-backend@~start:production: unsafe-perm in lifecycle true
8 verbose lifecycle app-backend@~start:production: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/app/backend/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
9 verbose lifecycle app-backend@~start:production: CWD: /app/backend
10 silly lifecycle app-backend@~start:production: Args: [ '-c', 'cross-env NODE_ENV=production nodemon ./server.js' ]
11 silly lifecycle app-backend@~start:production: Returned: code: 2 signal: null
12 info lifecycle app-backend@~start:production: Failed to exec start:production script
13 verbose stack Error: app-backend@ start:production: `cross-env NODE_ENV=production nodemon ./server.js`
13 verbose stack Exit status 2
13 verbose stack at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:332:16)
13 verbose stack at emitTwo (events.js:126:13)
13 verbose stack at EventEmitter.emit (events.js:214:7)
13 verbose stack at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack at emitTwo (events.js:126:13)
13 verbose stack at ChildProcess.emit (events.js:214:7)
13 verbose stack at maybeClose (internal/child_process.js:915:16)
13 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
14 verbose pkgid app-backend@
15 verbose cwd /app/backend
16 verbose Linux 4.19.76-linuxkit
17 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "start:production"
18 verbose node v8.17.0
19 verbose npm v6.13.4
20 error code ELIFECYCLE
21 error errno 2
22 error app-backend@ start:production: `cross-env NODE_ENV=production nodemon ./server.js`
22 error Exit status 2
23 error Failed at the app-backend@ start:production script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 2, true ]
任何帮助将不胜感激。
【问题讨论】:
-
您实际上是如何启动容器的?包括你的
Dockerfile和你的docker-compose.yml或docker run命令会很有帮助。 (特别是,如果您将node_modules目录绑定挂载到容器中,可能会发生这种情况;删除 Composevolumes:或docker run -v选项会对此有所帮助。) -
目前我正在使用这个
docker run --rm -ti my_app sh,当尝试在其中运行任何 npm 脚本时,我看到了同样的问题