我在尝试为我的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"
}
}
答案 0 :(得分:3)
我认为发生的事情是,docker run正在复制node_modules
容器内项目的本地COPY . /app
。
因此你得到了linux-x64错误。它基本上将所有特定于机器的代码从node_modules复制到必须具有另一个OS的容器中。要解决此问题,请通过在.dockerignore
旁边生成package.json
文件并仅添加一行来忽略node_modules。
node_modules
从here了解详情。