【发布时间】: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