I can not connect to docker mongodb

I have not used both dockers and node a lot, so I hope this is a simple mistake. I am using docker compose. If I access the browser, http://localhost:27017/ I get:

It looks like you are trying to access MongoDB via HTTP on the driver's native port.

In addition, magazines show that my mongodb is healed. The last line I tried to access through my browser, I think.

2017-01-25T21: 11: 13.509 + 0000 i JOURNAL [initandlisten] journal dir = / data / db / journal 2017-01-25T21: 11: 13.509 + 0000 i JOURNAL [initandlisten] restore: no log files, no recovery needed 2017-01-25T21: 11: 13.546 + 0000 I JOURNAL [durability] Strength of the thread started 2017-01-25T21: 11: 13.547 + 0000 I JOURNAL [journal author] The journal entry flow started 2017-01-25T21: 11: 13.568 + 0000 i CONTROL [initandlisten] MongoDB start: pid = 1 port = 27017 dbpath = / data / db 64-bit host = 150c248f4cc7 2017-01-25T21: 11: 13.568 + 0000 i CONTROL [initandlisten] version db v3.0.2 2017- 01-25T21: 11: 13.568 + 0000 i CONTROL [initandlisten] git version: 6201872043ecbbc0a4cc169b5482dcf385fc464f 2017-01-25T21: 11: 13.569 + 0000 i CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e February 11, 2013 2017- 01-25T21: 11: 13.569 + 0000 i CONTROL [initandlisten] assembly information: Linux ip-10-171-120-232 3.2.0-4-amd64 # 1 SMP Debian 3.2.46-1 x86_64 BOOST_LIB_VERSION = 1_49 2017- 01-25T21: 11: 13.569 + 0000 i CONTROL [initandlisten] distributor: tcmalloc 2017-01-25T21: 11: 13.569 + 0000 i CONTROL [initandlisten] parameters: {} 2017-01-25T21: 11: 13.573 + 0000 i NETWORK [initandlisten] is waiting for connection to port 27017 2017-01-25T21: 11: 17.843 + 0000 i NETWORK [initandlisten] connection accepted from 172.20.0.1:44148 # 1 (1 connection open) 2017-01-25T21: 11: 17.843 + 0000 I am a NETWORK [initandlisten] connection accepted from 172.20.0.1:44146 # 2 (now 2 connections are open) -01-25T21: 11: 17.998 + 0000 i NE TWORK [conn1] end connection 172.20.0.1:44148 (0 connections open now)

So it looks like my mongodb is working. When I try to access it in my node application, I get.

{MongoError: failed to connect to server [localhost: 27017] when connecting to the pool for the first time. (/ usr / src / app / node_modules / mongodb-core / lib / topologies / server.js: 326: 35) on emitOne (events.js: 96: 13) in Pool.emit (events.js: 188: 7) when connected. (/usr/src/app/node_modules/mongodb-core/lib/connection/pool.js:270:12) in Object.onceWrapper (events.js: 290: 19) on emitTwo (events.js: 106: 13) in Connection.emit (events.js: 191: 7) in Socket. (/usr/src/app/node_modules/mongodb-core/lib/connection/connection.js:175:49) in Object.onceWrapper (events.js: 290: 19) at emitOne (events.js: 96: 13) name: 'MongoError', message: 'failed to connect to server [localhost: 27017] on first connection'}

My code is trying to access mongodb

 const express = require('express'); const gh = require('./src/fetch'); const MongoClient = require('mongodb').MongoClient; const url = 'mongodb://localhost:27017/myApp'; // Constants const PORT = 8888; // App const app = express(); app.get('/', function (req, res) { MongoClient.connect(url, function (err, db) { if (err) { console.log(err); } else { console.log("Connected correctly to server"); db.close(); } }); res.send('Hello world\n'); }); app.listen(PORT); console.log('Running on http://localhost:' + PORT); 

My docker layout looks like this.

 version: '2' services: web: image: gh-api ports: - "8888:8888" environment: - KEY=abc restart: always links: - mongoDB depends_on: - mongoDB mongoDB: image: mongo:3.0.2 ports: - "27017:27017" 

Docker file for gh-api

 FROM node:7.4-onbuild EXPOSE 8888 
+5
source share
3 answers

Could you change the url of your mongodb:

const url = 'mongodb://localhost:27017/myApp';

to

const url = 'mongodb://mongoDB/myApp';

I had a similar problem with my demo block application and with this application the changes started to work.

Edit

The best explanation I could find was an explanation of the docker links .

Containers for the associated service will be accessible by the host name identical to the alias or service name if no alias has been specified.

So, in order to access the mongoDB container from the web container, you must use mongoDB as the host name in the web container.

+12
source

It looks like you are trying to access MongoDB via HTTP on the driver's native port.

This port must be used by the mongo driver. If you really need / need access to the rest interface, you need to use port 28017 and run mongo with the --rest flag. Example:

 $ docker run --rm -p 28017:28017 mongo mongod --rest 

To access the container from another, when creating dockers, use the service name, as Ivan pointed out.

0
source

In my case, everything was correctly configured in the same way as answered in this question, however, I got this error caused by "loading", basically my Node application loaded before the mongo image, and therefore it will try to connect to mongo before that and it works. So I changed the connection code to try again:

 init().then((mongo) => main({ mongo })).catch(e => init()) function init(){ return MongoClient.connect(mongoConnectionURL) } function main({ mongo }){ const server = express() server.listen(port, host); } 

I decided that this should be allowed using the depends_on property inside the layout file, but as far as I understand, depends_on only guarantees that other services will start, it does not guarantee that they were initialized in the correct order.

0
source

Source: https://habr.com/ru/post/1263361/


All Articles