web-dev-qa-db-fra.com

MongoDB activé avec Docker "n'a pas réussi à se connecter au serveur [localhost: 27017] lors de la première connexion"

J'utilise mongoDB avec et le backend NodeJS. Le problème est que j'obtiens l'erreur suivante

nœud: 16) UnhandledPromiseRejectionWarning: MongoNetworkError: échec de connexion au serveur [localhost: 27017] lors de la première connexion [MongoNetworkError: connect ECONNREFUSED 127.0.0.1.127017]

Ceci est mon docker-compose

version: '3.4'

services:
  db:
    image: mongo:latest
    ports:
      - '27017:27017'

  rest-api-node:
    build: .
    ports:
      - '5000:5000'
    links:
      - db
    restart: on-failure

J'ai essayé avec depends_on aussi, ne fonctionnait pas.

En backend, je suis mangouste en tant que middleware pour communiquer avec DB. c'est la partie de mon index.js

mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost/demo')
app.listen(port, () => console.log("live"))

J'ai également essayé d'utiliser la promesse, aucun changement cependant. Sil te plait aide moi. Merci d'avance

journal des erreurs complet

à Pool. (/app/node_modules/mongodb-core/lib/topologies/server.js:505:11) rest-api-node_1 | sur Pool.emit (events.js: 180: 13) rest-api-node_1 | à Connection. (/app/node_modules/mongodb-core/lib/connection/pool.js:329:12) rest-api-node_1 | sur Object.onceWrapper (events.js: 272: 13) rest-api-node_1 | sur Connection.emit (events.js: 180: 13) rest-api-node_1 | à Socket. (/app/node_modules/mongodb-core/lib/connection/connection.js:245:50) rest-api-node_1 | sur Object.onceWrapper (events.js: 272: 13) rest-api-node_1 | sur Socket.emit (events.js: 180: 13) rest-api-node_1 | à emitErrorNT (internal/streams/destroy.js: 64: 8) rest-api-node_1 | sur process._tickCallback (internal/process/next_tick.js: 178: 19) rest-api-node_1 | nom: 'MongoNetworkError', rest-api-node_1 |
message: "échec de connexion au serveur [localhost: 27017] lors de la première connexion [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]"}

6
itsMe

Par défaut Compose configure un réseau unique pour votre application. Chaque conteneur d'un service rejoint le réseau par défaut et est à la fois accessible par d'autres conteneurs sur ce réseau et détectable par eux à un nom d'hôte identique au nom du conteneur.

Selon ton docker-compose.yaml fichier, vous pouvez accéder à votre conteneur mongo sur 127.0.0.1:27017 uniquement à partir de la machine hôte. Pour y accéder à partir du conteneur principal NodeJS, vous devez utiliser db:27017.

5
Nickolay