【问题标题】:How to remotely connect to my MongoDB in my server with java?如何使用java远程连接到我服务器中的MongoDB?
【发布时间】:2018-02-12 23:03:24
【问题描述】:

我想通过笔记本电脑上的 Java 应用程序在我的服务器上使用我的 MongoDB。 这是我的ufw设置

aran@Aran:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
22                         ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
21/tcp                     ALLOW       Anywhere
27017                      ALLOW       1.234.56.78
27017                      ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
22 (v6)                    ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
21/tcp (v6)                ALLOW       Anywhere (v6)
27017 (v6)                 ALLOW       Anywhere (v6)

一开始我只有这个规则:

27017                      ALLOW       1.234.56.78

其中 1.234.56.78 是我的 IP 地址,但它不起作用,所以我添加了这条规则:

27017                      ALLOW       Anywhere

但这也无济于事。

这是我的java代码:

java.util.logging.Logger.getLogger("org.mongodb.driver").setLevel(Level.OFF);
MongoClientURI connectionString = new MongoClientURI("mongodb://123.45.67.89:27017");
MongoClient mongoClient = new MongoClient(connectionString);
MongoDatabase CaptionBotUsers = mongoClient.getDatabase("CaptionBotUsers");
//CaptionBotUsers.createCollection("users", new CreateCollectionOptions().autoIndex(true));
MongoCollection<Document> users = CaptionBotUsers.getCollection("users");
long found = users.count(Document.parse("{_id : " + Long.toString(user.getId()) + "}"));

但我明白了:

com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=123.45.67.89:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused: connect}}]

对于最后一行代码(早就找到了...)

那么我该如何解决这个问题?

【问题讨论】:

标签: java mongodb server firewall database


【解决方案1】:

来自 MongoDB documentation,它指出在某些安装中默认情况下仅侦听本地连接 (127.0.0.1)。

要远程连接,您需要在 /etc/mongod.conf 中配置公共可访问接口:

...
net:
  port: 27017
  bindIp: <your-ip>, 127.0.0.1
...

【讨论】:

  • 绑定到该特定 IP 不会向客户端打开它,是吗? 0.0.0.0 可能是首选
  • 没用。顺便提一句!你能编辑你的答案,这样我的真实 IP 就不会显示了吗?@GonzaloMatheu
  • (重新发布评论以删除公共 IP,因为我无法编辑)@cricket_007 它允许客户端与该 IP 建立 MongoDB 连接。如果您有多个网络接口,则可以更精细地控制允许您连接的对象。我必须说,我几乎总是使用 0.0.0.0。
  • 如果 bindIp 值是/曾经是 127.0.0.1 您将无法从外部连接,因此您必须更改它以允许外部连接。它可能无法解决您的问题,但您会需要它。
猜你喜欢
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
相关资源
最近更新 更多