【发布时间】: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}}]
对于最后一行代码(早就找到了...)
那么我该如何解决这个问题?
【问题讨论】:
-
您是否检查过 MongoDB 配置文件中的 bind_ip 设置?它应该允许外部连接(即:0.0.0.0)-> docs.mongodb.com/v2.2/reference/configuration-options/#bind_ip
-
你确定 mongodb 真的在运行吗?你已经配置了那个端口?如果您从任何地方打开端口,防火墙就会打开
-
尝试运行
sudo netstat -tupln | grep mongod来查看 mongo 正在监听的 IP 和端口
标签: java mongodb server firewall database