Docker ENTRYPOINT / CMD找不到文件

时间:2017-07-14 23:55:36

标签: node.js docker npm dockerfile

这太令人生畏了。

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

import pandas as pd
import xlrd

import xlwt

def file_parser(file):
    df_list = []
    for x in file.sheet_names[1::]:
        df = file.parse(x).assign(Source=x)
        df_list.append(df)
    return df_list

运行

后文件似乎很清楚
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

如果我这样使用ENTRYPOINT:

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

(cli.js有一个hashbang)

我得到了类似的错误:

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

这对我来说很奇怪,我现在已经使用了Docker一段时间了,之前没有见过这样的东西。有人知道可能会发生什么吗?似乎很清楚文件丢失了,但我无法弄清楚为什么会这样。特别是当我使用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 时,文件似乎存在。

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

ls -a

多么奇怪。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

我的坏家伙。

相关问题