【问题标题】:Error running npm Script when starting Docker Container启动 Docker 容器时运行 npm 脚本出错
【发布时间】:2020-03-27 18:11:58
【问题描述】:

在我的 DockerFile 中,我将此设置作为我的命令。

CMD config/startserver.sh

无法让 npm run build 正常工作。当我进入容器并手动运行 docekr exec npm run build 时,运行 npm run build 没有问题,但由于某种原因在 .sh 中运行它会导致问题。关于为什么在 .sh 中运行 npm run build 的任何想法都可能导致问题。

npm run build

pm2 start server.js -f -- 5000
pm2 start server.js -f -- 5001
pm2 start server.js -f -- 5002
pm2 start server.js -f -- 5003
pm2 start server.js -f -- 5004

nginx -g "daemon off;"

wait
0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'run', 'build\r' ]
2 info using npm@6.13.4
3 info using node@v10.19.0
4 verbose config Skipping project config: /home/lgd/.npmrc. (matches userconfig)
5 verbose stack Error: missing script: build
5 verbose stack
5 verbose stack Did you mean this?
5 verbose stack     build
5 verbose stack     at run (/usr/lib/node_modules/npm/lib/run-script.js:155:19)
5 verbose stack     at /usr/lib/node_modules/npm/lib/run-script.js:63:5
5 verbose stack     at /usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:116:5
5 verbose stack     at /usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:436:5
5 verbose stack     at checkBinReferences_ (/usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:391:45)
5 verbose stack     at final (/usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:434:3)
5 verbose stack     at then (/usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:161:5)
5 verbose stack     at ReadFileContext.<anonymous> (/usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:350:20)
5 verbose stack     at ReadFileContext.callback (/usr/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:115:16)
5 verbose stack     at FSReqWrap.readFileAfterOpen [as oncomplete] (fs.js:237:13)
6 verbose cwd /home/lgd
7 verbose Linux 4.19.76-linuxkit
8 verbose argv "/usr/bin/node" "/usr/bin/npm" "run" "build\r"
9 verbose node v10.19.0
10 verbose npm  v6.13.4
11 error missing script: build
11 error
11 error Did you mean this?
11 error     build
12 verbose exit [ 1, true ]

【问题讨论】:

  • 你也可以添加你的 dockerfile。可能是您在错误的文件夹位置执行。
  • 您的脚本有 DOS 行结尾(正在运行的命令是 build\r)。
  • 还要考虑 Dockerfile 中的 RUN npm build(在构建时,而不是在启动时),并让容器运行 CMD node server.js 5000。如果您需要服务器的多个副本或 nginx 代理,请在单独的容器中运行它们。
  • @DavidMaze 我有环境变量,我在运行时传递给容器,以便构建正确成功。我试图不在 DockerFile 中将所有环境变量都作为纯文本。我将尝试转换为 Linux 结尾,我认为这是问题所在。
  • @DavidMaze 我当前的设置是我希望拥有一个托管在我的 Linux 机器上的 Nginx 服务器,该服务器为该容器的多个实例提供服务。这将允许我在不停机的情况下更新图像。我已经看到文档说按你的方式做,但我不太确定为什么。我是 Docker 和 PM2 的新手,直到最近我的网站一直在 Heroku 上。我可能缺少一些东西。

标签: node.js docker npm


【解决方案1】:

必须恢复到在 Docker 中调用脚本,因为当我推送容器时,我的服务器上出现权限错误。

我认为大卫是对的,我只需要修正我的行尾。

我最终改变了

CMD config/startserver.sh

CMD [ "npm", "run", "start-production" ]

并添加到我的 package.json 脚本中

"start-production": "npm run build &amp;&amp; config/startserver.sh"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2018-05-20
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2015-11-05
    相关资源
    最近更新 更多