2017-01-03 7 views
0

Wie kann ich auf die Mongo-Datenbank zugreifen, die von Docker mit RoboMongo oder ähnlichem erstellt wurde?Docker + MongoDB: Wie Datenbank mit RoboMongo anzeigen?

Bevor ich Doncker benutze, habe ich schon mongodb in meinen Linux-Rechner installiert. Also kann ich den Port "27017: 27017" nicht in der docker-compse.yml verwenden. Ich benutze "27018: 27018":

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

Ich kann RoboMongo verwenden, um alle Datenbanken anzuzeigen, die ich in meinem Pre-Docker Mongo geschaffen. Aber wie kann ich auf den Docker zugreifen?

Das ist mein 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:

Wenn ich laufen die Docker auf meinem Terminal:

$ 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 neu er ror unten nach dem Port Wechsel zu "27018: 27017", wenn ich bin auf GET oder POST http://localhost:3000/data/from/dbhttp://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) 

Irgendwelche Ideen, warum?

Antwort

0

Sind Sie sicher, dass Ihr mongodb Port 27018 im Container abgehört hat? Basierend auf den Informationen in Ihrem Beitrag, nehme ich an, dass mongodb den Standardport 27017 innerhalb des Containers abhört und Sie den Host 27018 dem Container 27018 zuordnen, auf dem der Mongo nicht zuhört. Der ports Artikel soll wie folgt aussehen: 27018:27017, so dass die nicht verwendet Port auf dem Host, 27018, an den richtigen Anschluss auf den Behälter zugeordnet ist, 27017.

Diese Exposition gegenüber dem npm Behälter irrelevant ist, weil es einen anderen Mechanismus verwendet um die Ports mit einer Verbindung zwischen den Containern freizulegen. Du würdest herausfinden, dass, wenn du deine anderen Mongodb-Clients in Container legst, ein Link auch für sie funktionieren würde. Um jedoch vom Host aus interagieren zu können, müssen Sie den richtigen Port im Container einem verfügbaren Port auf dem Host verfügbar machen.

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

+0

I thnk Sie richtig sind - siehe meine bearbeiten oben. Ich weiß nicht, was diese Zeilen wirklich zu sagen versuchen. Aber ich kann die mit Docker erstellte Datenbank trotzdem mit RoboMongo sehen. Irgendwelche Ideen? – laukok

+0

kann ich fragen - was bedeuten 27018 und 27017 in '27018: 27017'? – laukok

+0

https://docs.docker.com/compose/compose-file/#/ports erklärt, dass die erste Nummer der Port ist, der auf dem Host weitergeleitet wird, und der zweite der Port ist, an den der Container weitergeleitet werden soll. Sie müssen nicht anders sein, was Docker betrifft, aber in Ihrem Fall verwendet der Host bereits 27017, also mussten Sie ihn ändern. Dieser Link bietet weitere Informationen. –

Verwandte Themen