连接到mongo容器使用节点获取MongoError

出于某种原因,我无法使用其他本主题上的stackoverflowpost工作。 我得到: MongoError: failed to connect to server [localhost:27017] on first connect

我开始了我的docker集装箱,并检查mongo是否工作:

 $ 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 } 

我退出然后开始在我的OSXterminal节点,并试图连接:

 $ node > var mongoose = require("mongoose"); > mongoose.connect("mongodb://localhost:27017"); mongoose {...} > MongoError: failed to connect to server [localhost:27017] on first connect ... 

我尝试了很多其他的url:

 mongoose.connect("mongodb://localhost:27017/test"); mongoose.connect("mongodb://localhost/test"); mongoose.connect("mongodb://127.0.0.1:27017"); 

所以只是试图连接到在Docker for Mac上运行的mongodb容器,并尝试使用nodejs连接到它。 我怎样才能做到这一点?

感谢Nehal的评论。

答案在于https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds

基本上,您不能在macOS中看到docker0接口,这意味着您无法将stream量路由到容器。 但是,这可以使用端口转发来解决。

我必须改变的是docker运行命令:

 docker run -d -p 27017:27017 --name my-mongo mongo 

这意味着你在这个实例中公开了作为docker的Linux端口,并将其转发给你的Mac( -p )。 -d标志在后台运行进程。

然后mongoose.connect("mongodb://localhost:27017/test"); 应该pipe用。