2017-09-05 98 views
1

我有一個問題想生成dockerfile爲我的應用程序的NodeJS:Dockerfile RUN不會在容器上下文中運行

我dockerfile:

FROM node 
WORKDIR /app 

COPY . /app 

RUN npm install 

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

的的NodeJS(NPM作爲的一部分安裝)需要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

你可以將你的package.json添加到問題中嗎? –

+0

@TarunLalwani附加 – FrankerZ

+0

我將與本指南中的dockerfile一起使用https://nodejs.org/en/docs/guides/nodejs-docker-webapp/ 它可能會將您已安裝的node_modules複製到系統相關的節點上,而不會更新到碼頭工人。 – Kieper

回答

3

我認爲正在發生的是,搬運工運行在COPY . /app 複製從容器內部項目當地node_modules

因此,你會得到linux-x64錯誤。它基本上將所有機器特定代碼從node_modules複製到必須具有其他OS的容器。要解決此問題,請通過在package.json旁邊創建.dockerignore文件並僅添加一行來忽略node_modules。

node_modules

瞭解更多關於它從here

相關問題