Dockerfile RUN不会在容器上下文

时间:2017-09-05 18:56:29

标签: node.js docker dockerfile grpc

我在尝试为我的nodejs应用程序生成dockerfile时遇到问题:

我的dockerfile:

FROM node
WORKDIR /app

COPY . /app

RUN npm install

EXPOSE 3000
CMD ["node", "/app/index.js"]

nodejs(作为npm install的一部分)需要grpc。当我尝试运行我的应用程序时,收到以下错误消息:

  

找不到模块'/app/node_modules/grpc/src/node/extension_binary/node-v57-linux-x64/grpc_node.node'

当我浏览app/node_modules/grpc/src/node/extension_binary/文件夹时,node-v48-win32-x64是其中唯一的文件夹。我的猜测是npm install运行时,它使用上下文我的主机检测到windows / x64并下载了该二进制文件。我想避免在运行时运行npm install。我该如何解决这个问题?

我的package.json:

{
  "name": "microservice-test",
  "version": "1.0.0",
  "description": "A test microservice.",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "FrankerZ",
  "license": "ISC",
  "devDependencies": {
    "grpcc": "0.0.8",
    "gulp-livereload": "^3.8.1"
  },
  "dependencies": {
    "async": "^2.5.0",
    "grpc": "^1.6.0",
    "gulp": "^3.9.1",
    "gulp-run": "^1.7.1",
    "gulp-util": "^3.0.8",
    "protoc-plugin": "0.0.6"
  }
}

1 个答案:

答案 0 :(得分:3)

我认为发生的事情是,docker run正在复制node_modules容器内项目的本地COPY . /app  。

因此你得到了linux-x64错误。它基本上将所有特定于机器的代码从node_modules复制到必须具有另一个OS的容器中。要解决此问题,请通过在.dockerignore旁边生成package.json文件并仅添加一行来忽略node_modules。

node_modules

here了解详情。