【问题标题】:npm script is unable to find file in workdir in a docker containernpm 脚本无法在 docker 容器的 workdir 中找到文件
【发布时间】:2021-01-30 19:51:17
【问题描述】:

这是我的 Dockerfile:

FROM node:12
WORKDIR /app
COPY . /app
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]

这是我的 package.json 中的 npm 脚本

"start": "main.js $npm_config_e $npm_config_t"

当我运行 docker 镜像时出现此错误

sh: 1: main.js: not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! image1@1.0.0 start: `main.js`

但是,当我执行“ls”时,main.js 位于工作目录 (/app) 中 如果我将 Dockerfile 更改为:

CMD ["node", "main.js"]

它有效。那么为什么npm脚本找不到main.js文件呢?

【问题讨论】:

  • 你是如何运行容器的? main.js 文件是否在开头带有 #! 解释器行的可执行文件?在您声称它有效的第二次调用中,您实际上得到了什么输出? (JSON 格式的单引号 CMD 是不允许的,这是在启动时导致 shell 错误的常见原因。)
  • 我没有在 main.js 的开头添加#!,这是在 docker 中运行 npm 脚本所必需的吗?使用CMD ["node", "main.js"](单引号是错字,抱歉)我从 Main.js 获得了预期的输出。再次没有#! 谢谢
  • 如果你想直接运行一个脚本./main.js,它要么是一个本机可执行文件,要么以#! 标记开头。 (不是 Docker 特定的。)
  • 遗憾的是这并没有什么不同。谢谢

标签: node.js docker npm dockerfile npm-scripts


【解决方案1】:

现在看起来很明显,但解决方案是将 node 添加到 npm 脚本中:

"start": "node main.js $npm_config_e $npm_config_t"

【讨论】:

    猜你喜欢
    • 2018-06-21
    • 2015-03-15
    • 2021-10-10
    • 1970-01-01
    • 2020-10-31
    • 2019-04-11
    • 2021-05-28
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多