node.js - Docker ENTRYPOINT/CMD 找不到文件

标签 node.js docker npm dockerfile

这实在是太令人困惑了。

我有这个简单的 Dockerfile,它使用 npm install 将依赖项安装到 node_modules 中:

FROM node:7

RUN chmod -R 777 $(npm root -g)
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json .
RUN npm install
RUN npm install github:sumanjs/suman#rebase_branch

COPY . .

RUN (cd node_modules && ls -a)  # 1 this logs expected stuff

RUN (cd node_modules/suman && ls -a)  # 2 this logs expected stuff

CMD ["node","/usr/src/app/node_modules/suman/cli.js"]

很明显,运行后该文件就在那里

cd node_modules/suman && ls -a

但由于某种原因我收到错误:

module.js:472
    throw err;
    ^

Error: Cannot find module '/usr/src/app/node_modules/suman/cli.js'
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:427:7)
    at startup (bootstrap_node.js:151:9)
    at bootstrap_node.js:542:3

如果我像这样使用 ENTRYPOINT :

ENTRYPOINT ["/usr/src/app/node_modules/suman/cli.js"]

(cli.js 有一个 hashbang)

我收到类似的错误:

container_linux.go:262: starting container process caused "exec: \"/usr/src/app/node_modules/suman/cli.js\": stat /usr/src/app/node_modules/suman/cli.js: no such file or directory"
docker: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "exec: \"/usr/src/app/node_modules/suman/cli.js\": stat /usr/src/app/node_modules/suman/cli.js: no such file or directory".
ERRO[0001] error waiting for container: context canceled 

这对我来说很奇怪,我已经使用 Docker 一段时间了,以前从未见过这样的东西。有人知道会发生什么吗?看起来很明显该文件丢失了,但我一生都无法弄清楚为什么会这样。特别是考虑到当我使用 ls -a 时,该文件似乎存在。

为了向您证明这一点,这是第二个 ls -a 命令的输出:

Step 10/11 : RUN (cd node_modules/suman && ls -a)
 ---> Running in 0715d56e23a9
.
..
.babelrc
.npmignore
.tscmultiwatch
README.md
cli
cli.d.ts
cli.js       <<< dis my file
config
dist
dts
examples
lib
package.json
scripts
webpack.config.js

多么奇怪。

最佳答案

哦该死,所以在 docker 构建步骤中,文件就在那里,并且 ls -a 显示了这一点。

但是当我使用 docker run 运行时,我得到了这个:

docker run -v "${project_root}/node_modules":/usr/src/app --name  ${container_name} ${image_tag}

因此容器中的node_modules目录被容器外部没有suman目录的node_modules覆盖。

我的坏家人。

关于node.js - Docker ENTRYPOINT/CMD 找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45113073/

相关文章:

php - Laravel php artisan 命令,指定 mysql 端口

node.js - NodeJS 中用于 API 的 stub DynamoDB

python - node.js 中的模板库类似于 Python 中的 Jinja2?

mysql - 从nodejs调用存储过程返回错误

node.js - git bash 找不到模块 npm-cli.js

node.js - 在 npm 包全局安装上获取 "npm ERR! code EPEERINVALID"

javascript - 有没有从 Java 程序中使用 Node.js 包的好方法?

node.js - npm run 生产错误我无法破译

docker - 如何在创建(声明)持久卷时创建文件?

docker - Docker运行nanoserver无法启动