簡體   English   中英

如何讓我的 NodeJS 應用程序在 Docker 中啟動

[英]How can I get my NodeJS app to start in Docker

我有一個 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 ] 

任何幫助將不勝感激。

把你的 NODE_ENV 放在 docker 像這樣組成:

  server:
    image: your_image
    environment:
      - NODE_ENV=production

然后你可以將你的 CMD 簡化為 CMD ["nodemon", "./server.js"]

在這里回答我自己的問題,以防有人看到類似的錯誤:在我的 package.json 中,我依賴於節點:

"dependencies": {
    ...
    "node": "^8.10.0",
    ...
  }

刪除此行后,docker 容器正確啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM