Ошибка «Не удалось загрузить двоичный модуль gRPC» при запуске приложения Sails.js внутри контейнера Docker - PullRequest
0 голосов
/ 09 октября 2018

У меня есть локальная среда разработки 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 "- это файл bootstrap.js в моем проекте Sails.js, который инициализирует @ google-cloud / logging.Вот как я инициализирую регистратор в bootstrap.js:

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

Я просто не могу понять, почему происходит эта ошибка.Я даже попытался изменить свое базовое изображение Docker на официальное изображение Docker Google App Engine (gcr.io/google-appengine/nodejs), и это тоже не помогло.я не могу найти решения этой проблемы нигде.Цени любую помощь.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Случайно ли вы делали npm install на своем локальном окружении Mac (darwin), когда это должно было быть сделано в контейнере (linux)?Двоичный файл grpc предназначен для неправильной ОС, поэтому ошибка.Это часто случается с локальным Mac, на котором запущен контейнер Docker Linux.

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

Решение будет rm -fr node_modules и сделать npm install в контейнере.

0 голосов
/ 09 октября 2018

Похоже, что проекту не удается найти зависимости, такие как двоичный модуль gRPC (восстановленный с помощью npm install grpc) или, возможно, там, где они в данный момент находятся - дополнительная информация здесь

...