【问题标题】:Docker ENTRYPOINT/CMD cannot find fileDocker ENTRYPOINT/CMD 找不到文件
【发布时间】:2017-12-20 03:38:00
【问题描述】:

这太令人困惑了。

我有这个简单的 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

多么奇怪。

【问题讨论】:

    标签: node.js docker npm dockerfile


    【解决方案1】:

    哦该死,所以在 docker build 步骤中,文件就在那里,ls -a 透露了这一点。

    但是当我使用 docker run 运行时,我有这个:

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

    因此容器中的 node_modules 目录被来自容器外部的 node_modules 覆盖,而该容器外部没有 suman 目录。

    我的坏名声。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2019-05-02
      • 2018-08-08
      • 2019-02-09
      • 1970-01-01
      相关资源
      最近更新 更多