Por alguna razón, no pude hacer que funcionara usando otras publicaciones de stackoverflow sobre este tema. Recibo: MongoError: failed to connect to server [localhost:27017] on first connect .
Inicié mi contenedor docker y verifiqué si mongo estaba funcionando:
$ docker run --name my-mongo -d mongo $ docker exec -it my-mongo bash # mongo MongoDB shell version v3.4.2 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.2 Server has startup warnings: 2017-03-19T01:23:53.047+0000 I STORAGE [initandlisten] 2017-03-19T01:23:53.047+0000 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 2017-03-19T01:23:53.047+0000 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem 2017-03-19T01:23:53.290+0000 I CONTROL [initandlisten] 2017-03-19T01:23:53.290+0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2017-03-19T01:23:53.290+0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2017-03-19T01:23:53.290+0000 I CONTROL [initandlisten] > db.col.insert({"a":1}) > db.col.find() { "_id" : ObjectId("58cde45479f772a8ea882ee1"), "a" : 1 }Salí y luego inicié el nodo en mi terminal OSX e intenté conectarme:
$ node > var mongoose = require("mongoose"); > mongoose.connect("mongodb://localhost:27017"); mongoose {...} > MongoError: failed to connect to server [localhost:27017] on first connect ...Probé muchas otras URL:
mongoose.connect("mongodb://localhost:27017/test"); mongoose.connect("mongodb://localhost/test"); mongoose.connect("mongodb://127.0.0.1:27017");Entonces, solo intento conectarme a un contenedor mongodb que se ejecuta en docker para mac e intentar conectarme usando nodejs. ¿Cómo puedo conseguir esto?
Gracias Nehal por el comentario.
La respuesta se encuentra aquí https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
Básicamente, no puede ver una interfaz docker0 en macOS, lo que significa que no puede enrutar el tráfico a los contenedores. Sin embargo, eso se puede resolver mediante el reenvío de puertos.
Todo lo que tengo que cambiar es el comando de ejecución de la ventana acoplable:
docker run -d -p 27017:27017 --name my-mongo mongo Esto significa que expone el puerto de Linux, que es Docker en este caso, y lo reenvía a su Mac ( -p ). El indicador -d ejecuta el proceso en segundo plano.
Luego mongoose.connect("mongodb://localhost:27017/test"); Deberia trabajar.