sematext/sematext-agent-express

Cannot find module dockerode

PrabhuKathiresan opened this issue · 5 comments

I am getting the following error whenever I try to monitor my app via docker

Error while setting up database { Error: Cannot find module 'dockerode'
web_app    |     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:580:15)
web_app    |     at Module.Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:61:29)
web_app    |     at require (internal/modules/cjs/helpers.js:20:18)
web_app    |     at Object.<anonymous> (/usr/src/app/node_modules/spm-agent/lib/util/docker.js:12:16)
web_app    |     at Module._compile (internal/modules/cjs/loader.js:688:30)
web_app    |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
web_app    |     at Module.load (internal/modules/cjs/loader.js:598:32)
web_app    |     at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
web_app    |     at Function.Module._load (internal/modules/cjs/loader.js:529:3)
web_app    |     at Module.require (internal/modules/cjs/loader.js:636:17)
web_app    |     at Module.Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:80:39)
web_app    |     at require (internal/modules/cjs/helpers.js:20:18)
web_app    |     at new SpmAgent (/usr/src/app/node_modules/spm-agent/lib/index.js:25:3)
web_app    |     at NodeJSAgent (/usr/src/app/node_modules/spm-agent-nodejs/lib/index.js:25:18)
web_app    |     at Object.<anonymous> (/usr/src/app/node_modules/spm-agent-nodejs/lib/index.js:44:18)
web_app    |     at Module._compile (internal/modules/cjs/loader.js:688:30)
web_app    |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
web_app    |     at Module.load (internal/modules/cjs/loader.js:598:32)
web_app    |     at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
web_app    |     at Function.Module._load (internal/modules/cjs/loader.js:529:3)
web_app    |     at Module.require (internal/modules/cjs/loader.js:636:17)
web_app    |     at Module.Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:80:39) code: 'MODULE_NOT_FOUND' }

Any idea how to resolve this?

Dockerfile

FROM alpine AS build
WORKDIR /usr/src/app
RUN apk add --no-cache --update \
  python3 \
  make \
  gcc \
  g++ \
  nodejs \
  nodejs-npm

COPY package.json package-lock.json ./
RUN npm install --production

#############

FROM node:10.13.0
# Create app directory
WORKDIR /usr/src/app
# Bundle app source
COPY --from=build /usr/src/app/node_modules ./node_modules
COPY . .

RUN npm install -g pm2

ENTRYPOINT [ "pm2-runtime", "ecosystem.config.js", "--only", "web_app" ]

Hi!

This release should patch it.

Thanks for opening the issue!

Now I am getting a different issue.

web_app    | { Error: Cannot find module '/usr/src/app/node_modules/@sematext/gc-stats/build/gcstats/v1.5.2/Release/node-v64-linux-x64/gcstats.node'
web_app    |     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:580:15)
web_app    |     at Module.Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:61:29)
web_app    |     at require (internal/modules/cjs/helpers.js:20:18)
web_app    |     at Object.<anonymous> (/usr/src/app/node_modules/@sematext/gc-stats/index.js:7:13)
web_app    |     at Module._compile (internal/modules/cjs/loader.js:688:30)
web_app    |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
web_app    |     at Module.load (internal/modules/cjs/loader.js:598:32)
web_app    |     at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
web_app    |     at Function.Module._load (internal/modules/cjs/loader.js:529:3)
web_app    |     at Module.require (internal/modules/cjs/loader.js:636:17)
web_app    |     at Module.Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:80:39)
web_app    |     at require (internal/modules/cjs/helpers.js:20:18)
web_app    |     at Object.<anonymous> (/usr/src/app/node_modules/spm-agent-nodejs/lib/gcAgent.js:13:18)
web_app    |     at Module._compile (internal/modules/cjs/loader.js:688:30)
web_app    |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
web_app    |     at Module.load (internal/modules/cjs/loader.js:598:32)
web_app    |     at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
web_app    |     at Function.Module._load (internal/modules/cjs/loader.js:529:3)
web_app    |     at Module.require (internal/modules/cjs/loader.js:636:17)
web_app    |     at Module.Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:80:39)
web_app    |     at require (internal/modules/cjs/helpers.js:20:18)
web_app    |     at /usr/src/app/node_modules/spm-agent-nodejs/lib/index.js:34:21 code: 'MODULE_NOT_FOUND' }
web_app    | 2021-02-15T08:44:03.741Z - error: Error loading agent ./gcAgent.js Error: Cannot find module '/usr/src/app/node_modules/@sematext/gc-stats/build/gcstats/v1.5.2/Release/node-v64-linux-x64/gcstats.node'

Am I missing something?

That's because of node-gyp. You need to make sure both your images in the Dockerfile are the same Linux distro.

Use the Dockerfile from the Sematext installation instructions.

Here's an example:

FROM alpine AS build
WORKDIR /usr/src/app
RUN apk add --no-cache --update \
  python3 \
  make \
  gcc \
  g++ \
  nodejs \
  nodejs-npm
 
COPY package.json package-lock.json ./
RUN npm install --production
 
#############
 
FROM alpine
WORKDIR /usr/src/app
RUN apk add --no-cache --update nodejs
COPY --from=build /usr/src/app/node_modules ./node_modules
COPY . .
EXPOSE <PORT>
CMD ["node", "app.js"]

The gc-stats package, once installed, can only run on the same Linux distro. So, use either FROM alpine in both images or use FROM node:10.13.0 in both images. Do not mix them.

Got it now it works... Thank you ...