Dockerfile 运行 在容器上下文中不会 运行

Dockerfile RUN doesn't to run in container context

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

我的 docker 文件:

FROM node
WORKDIR /app

COPY . /app

RUN npm install

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

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

Cannot find module '/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 并下载了那个二进制文件。我想在 运行 时间避免 运行ning 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"
  }
}

我认为正在发生的事情是,docker 运行 正在从位于 COPY . /app 的容器内的项目中复制本地 node_modules .

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

node_modules

here 阅读更多相关信息。