docker-compose не может подключиться к моей локальной momgodb - PullRequest
0 голосов
/ 26 апреля 2018

Я искал похожие вопросы и пытался найти решение для моего; К сожалению, это все еще не работает. Кажется, все необходимое было сделано.

Хорошо, мой вопрос, мое приложение AngularCLI, 'aied', обращается к локальной MongoDB с именем 'mockup'. Docker-compose.yml выглядит следующим образом:

version: '3' # specify docker-compose version

# Define the services/containers to be run
services:
  aied: #name of the second service
    build: .
    environment:
      - MONGO_URI=mongodb://db:27017/mockup
    volumes:
      - .:/usr/src/app
    ports:
      - "3000:3000" #specify ports forewarding
    depends_on:
      - db
    links:
      - db
  db:
    image: mongo
    environment:
      - MONGODB_USER=username
      - MONGODB_PASS=admin
      - MONGO_INITDB_DATABASE=mockup
      - MONGO_DATA_DIR=/data/db
    ports:
      - "27017:27017"
    volumes:
      - ./data/db:/data/db
    command: mongod --smallfiles --logpath=/dev/null # --quiet

volumes:
  db:

Часть server.js выглядит следующим образом

    //const db = "mongodb://user:pass@ds247347.mlab.com:47347/mockup";
    const db= "mongodb://db:27017/mockup";

    mongoose.Promise = global.Promise;

    mongoose.connect(db, function(err){
      if(err){
        console.error("can not receive data from mongodb ... " );
        console.error("Error! " + err);
      } else { console.log("... connected to "+db.toString());}
    });

    router.get('/models', function(req, res){
      console.log('Get request for all models');
      mdl.find({})
        .exec(function(err, mdls){
          if (err){
            console.log("Error retrieving models");
          }else {
            res.json(mdls);
          }
          console.log('mdls length: ' + mdls.length);
        });
    });

После "docker-compose up" я получил следующее:

Attaching to mockup_db_1, mockup_aied_1
aied_1  | 
aied_1  | > mock-up@0.0.0 start /usr/src/app
aied_1  | > node server
aied_1  | 
aied_1  | (node:15) DeprecationWarning: `open()` is deprecated in     mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client
aied_1  | Server running on localhost:3000
aied_1  | ... connected to mongodb://db:27017/mockup
aied_1  | Get request for all models
aied_1  | mdls length: 0

Проблема в том, что docker-compose отлично работает с моей удаленной MongoDB на mLab, он просто не может получить доступ с моей локальной MongoDB.

Во-первых, я использую «docker ps» для проверки запущенных контейнеров, например,

bdcebd0b0e0b        mockup_aied                                              
"npm start"              About an hour ago   Up 17 seconds       
0.0.0.0:3000->3000/tcp     mockup_aied_1
583f719d9f4a        mongo                                                    
"docker-entrypoint.s…"   About an hour ago   Up 18 seconds       
0.0.0.0:27017->27017/tcp   mockup_db_1

Во-вторых, используя «docker exec -it mockup_db_1 mongo», я попадаю в оболочку mongo,

  > show dbs
 admin   0.000GB
 config  0.000GB
 local   0.000GB

 > use mockup
 switched to db mockup
 > show collections
 > db.collection.count()
 0

Проблема ясна, сборник (данные) не может быть добавлен в работающий контейнер mongodb.

Может ли кто-нибудь мне помочь? Большое спасибо.

1 Ответ

0 голосов
/ 11 мая 2018

Да, с помощью друга я наконец решил это. Изменения: - использовать другой порт для монго, например, 27027; - mongodump мои данные из локального порта 27017 - mongorestore сбрасывает данные в порт 27027

Это работает тогда.

...