When I start a dockerized Node.js testapp with

sudo docker-compose up

I get the following error:

Starting testapp_web_1 ... done
Attaching to testapp_web_1
web_1  |
web_1  | > [email protected] start /usr/app
web_1  | > node index.js
web_1  |
web_1  | internal/modules/cjs/loader.js:613
web_1  |     throw err;
web_1  |     ^
web_1  |
web_1  | Error: Cannot find module 'mongodb'
web_1  | Require stack:
web_1  | - /usr/app/index.js
web_1  |     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:610:15)
web_1  |     at Function.Module._load (internal/modules/cjs/loader.js:526:27)
web_1  |     at Module.require (internal/modules/cjs/loader.js:666:19)
web_1  |     at require (internal/modules/cjs/helpers.js:16:16)
web_1  |     at Object.<anonymous> (/usr/app/index.js:4:21)
web_1  |     at Module._compile (internal/modules/cjs/loader.js:759:30)
web_1  |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
web_1  |     at Module.load (internal/modules/cjs/loader.js:628:32)
web_1  |     at Function.Module._load (internal/modules/cjs/loader.js:555:12)
web_1  |     at Function.Module.runMain (internal/modules/cjs/loader.js:826:10)
web_1  | npm ERR! code ELIFECYCLE
web_1  | npm ERR! errno 1
web_1  | npm ERR! [email protected] start: `node index.js`
web_1  | npm ERR! Exit status 1
web_1  | npm ERR!
web_1  | npm ERR! Failed at the [email protected] start script.
web_1  | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
web_1  |
web_1  | npm ERR! A complete log of this run can be found in:
web_1  | npm ERR!     /root/.npm/_logs/2019-05-04T15_34_04_615Z-debug.log
testapp_web_1 exited with code 1

The project structur is as follows

- testapp
--- docker-compose.yml
--- dockerfile
--- src
----- index.js
----- package.json


'use strict';

const MongoClient = require('mongodb').MongoClient;
const express = require('express');

// Constants
const PORT = 8080;

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello world\n');

console.log(`Running on Port:${PORT}`);


  "name": "testapp",
  "version": "0.0.1",
  "description": "Testapp",
  "author": "hi there",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  "dependencies": {
    "express": "^4.16.4",
    "mongodb": "^3.2.3"


FROM node:12-alpine

WORKDIR /usr/app

COPY package*.json ./

RUN npm install

COPY . .



version: '3'
    build: .
    command: npm start
      - ./src:/usr/app/
      - /usr/app/node_modules
      - 80:8080

I have alread read this stackoverflow thread but I couldn't solve this issue. I'm getting this error no matter what module I'm trying to use: mongodb, spdy, etc. Locally without docker the testapp is working. But I don't know what I'm doing wrong with docker. Can anyone help me?

2 Answers 2


You need to remove the volumes all together. Files are copied by your Dockerfile build:

version: '3'
    build: .
    command: npm start
      - 80:8080
      - /usr/app/node_modules

This volume could be overwriting what you have installed during the RUN npm install stage of the Dockerfile. As far as I can see you're not doing any installation when starting the container, so the contents of the mount are empty. If you remove that mount, the node_modules path will be populated with what was installed during the docker build (as defined by the Dockerfile) phase.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.