2017-01-03 2 views
0

Как я могу получить доступ к базе данных mongo, созданной Docker с помощью RoboMongo или чего-то подобного?Docker + MongoDB: Как просмотреть базу данных с RoboMongo?

Перед использованием Doncker, я уже установил mongodb в свою машину Linux. Поэтому я не могу использовать порт «27017: 27017» в файле docker-compse.yml. Я использую «27018: 27018»:

version: "2" 
services: 
    web: 
    build: . 
    ports: 
     - "3000:3000" 
    links: 
     - mongo 
    mongo: 
    image: mongo 
    volumes: 
     - /data/mongodb/db:/data/db 
    ports: 
     - "27018:27018" 

можно использовать RoboMongo, чтобы просмотреть все базы данных, которые я создал в моем предварительно Docker Монго. Но как я могу получить доступ к докеру?

Это мой DockerFile:

FROM mhart/alpine-node:latest 
ADD package.json /tmp/package.json 
RUN cd /tmp && npm install 
RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/ 

WORKDIR /opt/app 
ADD . /opt/app 

EXPOSE 3000 

CMD ["npm", "start"] 

EDIT:

Когда я бегу докер на моем терминале:

$ docker-compose up 
Starting dummyapp_mongo_1 
Recreating dummyapp_web_1 
Attaching to dummyapp_mongo_1, dummyapp_web_1 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=571498710dc0 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten] db version v3.4.1 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten] git version: 5e103c4f5583e2566a45d740225dc250baacfbd7 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1t 3 May 2016 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten] allocator: tcmalloc 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten] modules: none 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten] build environment: 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten]  distmod: debian81 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten]  distarch: x86_64 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten]  target_arch: x86_64 
mongo_1 | 2017-01-03T10:20:35.083+0000 I CONTROL [initandlisten] options: {} 
mongo_1 | 2017-01-03T10:20:35.104+0000 I -  [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'. 
mongo_1 | 2017-01-03T10:20:35.104+0000 I STORAGE [initandlisten] 
mongo_1 | 2017-01-03T10:20:35.104+0000 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 
mongo_1 | 2017-01-03T10:20:35.104+0000 I STORAGE [initandlisten] **   See http://dochub.mongodb.org/core/prodnotes-filesystem 
mongo_1 | 2017-01-03T10:20:35.104+0000 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=1454M,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0), 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] **   Read and write access to data and configuration is unrestricted. 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] **  We suggest setting it to 'never' 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] **  We suggest setting it to 'never' 
mongo_1 | 2017-01-03T10:20:36.385+0000 I CONTROL [initandlisten] 
mongo_1 | 2017-01-03T10:20:36.389+0000 I FTDC  [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data' 
mongo_1 | 2017-01-03T10:20:36.390+0000 I NETWORK [thread1] waiting for connections on port 27017 
web_1 | 
web_1 | > [email protected] start /opt/app 
web_1 | > node ./bin/www 

EDIT 2:

A новее ROR ниже после изменения порта на "27018: 27017", когда я на ПОЛУЧИТЬ http://localhost:3000/data/from/db или POST http://localhost:3000/data/into/db:

failed to connect to server [mongo:27017] on first connect 

MongoError: failed to connect to server [mongo:27017] on first connect 
    at Pool.<anonymous> (/opt/app/node_modules/mongodb-core/lib/topologies/server.js:325:35) 
    at emitOne (events.js:96:13) 
    at Pool.emit (events.js:188:7) 
    at Connection.<anonymous> (/opt/app/node_modules/mongodb-core/lib/connection/pool.js:270:12) 
    at Connection.g (events.js:292:16) 
    at emitTwo (events.js:106:13) 
    at Connection.emit (events.js:191:7) 
    at Socket.<anonymous> (/opt/app/node_modules/mongodb-core/lib/connection/connection.js:173:49) 
    at Socket.g (events.js:292:16) 
    at emitOne (events.js:96:13) 

Любые идеи, почему?

ответ

0

У вас есть ваш mongodb, слушая порт 27018 в контейнере? Основываясь исключительно на информации в вашем сообщении, я предполагаю, что mongodb прослушивает свой порт по умолчанию, 27017, внутри контейнера, и вы сопоставляете узел 27018 с контейнером 27018, который mongo не прослушивает. Это ports пункт должен выглядеть следующим образом: 27018:27017 так, что неиспользуемый порт на хосте, 27018, отображается в соответствующий порт на контейнере, 27017.

Это воздействие не имеет никакого отношения к контейнеру НПМ, поскольку он использует другой механизм чтобы открыть порты, со ссылкой между контейнерами. Вы обнаружили бы, что если вы поместите других клиентов-монгодбов в контейнеры, для них также будет работать ссылка. Но для взаимодействия с хостом вам необходимо выставить правильный порт в контейнере в доступный порт на хосте.

https://docs.docker.com/compose/compose-file/#/ports

+0

Я thnk ты прав - смотрите мое редактирование выше. Я не знаю, что эти строки пытаются сказать на самом деле. Но я вижу базу данных, созданную в Docker, в любом случае с RoboMongo. Есть идеи? – laukok

+0

Могу я спросить - что такое 27018 и 27017, ссылаясь на '27018: 27017'? – laukok

+0

https://docs.docker.com/compose/compose-file/#/ports объясняет, что первым номером является порт для пересылки на хост, а второй - порт для пересылки его на контейнер. Они не должны отличаться от докеров, но в вашем случае хост уже использует 27017, поэтому вам пришлось его изменить. Эта ссылка предоставляет дополнительную информацию. –