Получение ошибки bong монго с помощью Docker на Mongoose / Express - PullRequest
0 голосов
/ 02 июля 2019

Я работаю над небольшим тестовым проектом, и все работало нормально, пока я не добавил date-logger «сервис», который использует mongoose.

Я получаю следующую ошибку при запуске docker-compose up --build:

Error: Cannot find module 'mongodb/node_modules/bson'
Require stack:
- /app/node_modules/mongoose/lib/drivers/node-mongodb-native/objectid.js
...

Все остальное запускается и работает правильно, кроме этой службы, которая сразу же перестает работать, как только достигается require('mongoose').

Вот некоторые важные файлы:

docker-compose.yml:

version: '3'
services:
  postgres:
    image: 'postgres:latest'
  redis:
    image: 'redis:latest'
  api:
    build: 
      dockerfile: Dockerfile.dev
      context: ./server
    volumes:
      - /app/node_modules
      - ./server:/app
    environment: 
      - REDIS_HOST=${REDIS_HOST}
      - REDIS_PORT=${REDIS_PORT}
      - PG_USER=${PG_USER}
      - PG_HOST=${PG_HOST}
      - PG_DB=${PG_DB}
      - PG_PASSWORD=${PG_PASSWORD}
      - PG_PORT=${PG_PORT}
  date-logger:
    build: 
      dockerfile: Dockerfile.dev
      context: ./date-logger
    volumes:
      - /app/node_modules
      - ./date-logger:/app
    environment: 
      - EXPRESS_PORT=${EXPRESS_PORT}
    depends_on:
      - "mongo"
  client:
    build:
      dockerfile: Dockerfile.dev
      context: ./client
    volumes:
      - /app/node_modules
      - ./client:/app
  worker:
    build:
      dockerfile: Dockerfile.dev
      context: ./worker
    volumes:
      - /app/node_modules
      - ./worker:/app
    environment: 
      - REDIS_HOST=${REDIS_HOST}
      - REDIS_PORT=${REDIS_PORT}
  nginx:
    restart: always
    build:
      dockerfile: Dockerfile.dev
      context: ./nginx
    ports:
      - '3050:80'
  mongo:
    image: mongo
    restart: always
    container_name: mongo

Dockerfile.dev на date-logger

FROM node:alpine
WORKDIR '/app'
COPY ./package.json .
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]

package.json на date-logger:

{
  "dependencies": {
    "express": "~4.17.0",
    "mongoose": "~5.5.11",
    "cors": "2.8.4",
    "body-parser": "~1.19.0"
  },
  "devDependencies": {
    "nodemon": "1.19.0"
  },
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon"
  }
}

index.js на date-logger:


let express = require('express');
let bodyParser = require('body-parser');

// This console.log works
console.log('date-logger hello ---');

// ****!!!! IT FAILS IMMEDIATELY ON THIS REQUIRE !!!****
let mongoose = require('mongoose');

let app = express();

app.use(
  bodyParser.urlencoded({
    extended: true
  })
);
app.use(bodyParser.json());

mongoose.connect('mongodb://mongo/date-logger');

const ItemSchema = new mongoose.Schema({
  value: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  }
});
Item = mongoose.model('item', ItemSchema);

var port = process.env.EXPRESS_PORT || 8080;

app.get('/', (req, res) => res.send('Hello World with Express'));
app.get('/date', (req, res) => res.send('data'));

app.get('/date/all', (req, res) => {
  Item.find({}).exec().then(results => res.send(results))
});

app.post('/date/add', (req, res) => {
  const newItem = new Item({
    value: req.body.value
  });

  newItem.save().then(item => res.send('success'));
});

app.listen(port, function() {
  console.log('Running RestHub on port ' + port);
});

Я новичок в мире devops, так что вся / любая помощь очень ценится! Спасибо!

1 Ответ

0 голосов
/ 02 июля 2019

Я думаю, что ваша проблема связана с мангустом, а не с докером, проверить эту проблему

...