簡體   English   中英

在 Docker 容器內運行 Sails.js 應用程序時出現“無法加載 gRPC 二進制模塊”錯誤

[英]"Failed to load gRPC binary module" error when running a Sails.js application inside a Docker container

我有一個本地 Docker 開發人員環境來構建 Sails.js 應用程序。 這是我的 Dockerfile 的樣子:

FROM node:8.12
LABEL Name=us.gcr.io/my-project/my-app Version=1.0.0

# Container configuration
RUN npm install -g sails@1.0.2 grunt@1.0.3 nodemon@1.18.4
WORKDIR /usr/src/app
COPY ./server/package.json ./package.json
RUN npm install
VOLUME /usr/src/app
EXPOSE 1337

這是我的 docker-compose.yml 文件的樣子:

version: '3.4'

services:
  server:
    image: us.gcr.io/my-project/my-app:latest
    build: .
    environment:
      NODE_ENV: development
      IS_DEV_MACHINE: "yes"
    ports:
      - 1338:1337 # HOST_PORT is 1339 to avoid conflicts with other Sails.js apps running on host
    volumes:
      - ./server:/usr/src/app
    entrypoint: nodemon

  mongodb:
    image: mongo:4
    ports:
      - 27018:27017 # HOST_PORT is 27018 to avoid conflicts with other MongoDB databases running on host
    volumes:
      - ../database:/data/db

通常,一切正常,但是,我最近在我的應用程序中導入並初始化了@google-cloud/logging NPM 包,現在,當我運行docker-compose up ,出現以下錯誤:

server_1   | error: Bootstrap encountered an error: (see below)
server_1   | error: Failed to lift app: { Error: Failed to load gRPC binary module because it was not installed for the current system
server_1   | Expected directory: node-v57-linux-x64-musl
server_1   | Found: [node-v57-darwin-x64-unknown]
server_1   | This problem can often be fixed by running "npm rebuild" on the current system
server_1   | Original error: Cannot find module '/usr/src/app/node_modules/grpc/src/node/extension_binary/node-v57-linux-x64-musl/grpc_node.node'
server_1   |     at Object.<anonymous> (/usr/src/app/node_modules/grpc/src/grpc_extension.js:53:17)
server_1   |     at Module._compile (module.js:653:30)
server_1   |     at Object.Module._extensions..js (module.js:664:10)
server_1   |     at Module.load (module.js:566:32)
server_1   |     at tryModuleLoad (module.js:506:12)
server_1   |     at Function.Module._load (module.js:498:3)
server_1   |     at Module.require (module.js:597:17)
server_1   |     at require (internal/module.js:11:18)
server_1   |     at Object.<anonymous> (/usr/src/app/node_modules/grpc/src/client_interceptors.js:145:12)
server_1   |     at Module._compile (module.js:653:30)
server_1   |     at Object.Module._extensions..js (module.js:664:10)
server_1   |     at Module.load (module.js:566:32)
server_1   |     at tryModuleLoad (module.js:506:12)
server_1   |     at Function.Module._load (module.js:498:3)
server_1   |     at Module.require (module.js:597:17)
server_1   |     at require (internal/module.js:11:18) code: 'MODULE_NOT_FOUND' }
mongodb_1  | 2018-10-09T09:27:52.521+0000 I NETWORK  [conn4] end connection 172.19.0.2:48730 (0 connections now open)

在上面的錯誤中,“Bootstrap”是我的 Sails.js 項目中用於初始化 @google-cloud/logging 的 bootstrap.js 文件。 這就是我在 bootstrap.js 中初始化記錄器的方式:

// Globally required packages
const { Logging } = require('@google-cloud/logging');
const logging = new Logging({ projectId: 'my-project' });
const logger = logging.log('test');

我似乎無法弄清楚為什么會發生此錯誤。 我什至嘗試將我的基本 Docker 映像更改為官方的 Google App Engine Docker 映像 (gcr.io/google-appengine/nodejs),但這也無濟於事。 我在任何地方都找不到任何解決此問題的方法。 感謝任何幫助。

您是否有機會在本地 Mac ( darwin ) 環境中進行了npm install ,而本應在容器 ( linux ) 中完成? grpc 二進制文件用於錯誤的操作系統,因此是錯誤的。 這通常發生在運行 linux Docker 容器的本地 Mac 上。

Expected directory: node-v57-linux-x64-musl Found: [node-v57-darwin-x64-unknown]

解決方案是rm -fr node_modules並在容器中執行npm install

通過以下命令重建應用程序。

npm rebuild --target=8.1.0 --target_platform=linux --target_arch=x64 --target_libc=musl

看起來該項目難以找到依賴項,例如 gRPC 二進制模塊(已使用npm install grpc修復)或者它們當前所在的位置 -更多信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM