【发布时间】: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 上。我可能缺少一些东西。