2016-10-31 82 views
1

我有一个运行MongoDB 3.2.10的Amazaon AWS EC2实例,我使用these instrunctions设置了它。我可以通过在Putty shell中调用mongo --port 27017来输入MongoDB shell,因此mongod守护程序在该机器上运行得很好。无法连接到通过SSH在AWS EC2实例上运行的MongoDB

我建立了从我的机器到EC2实例的SSH隧道,将我机器上的端口12345映射到远程EC2实例上的27017。然而,当我试图通过调用mongo --port 12345从我的本地Windows机器连接到MongoDB中,蒙戈壳客户端挂起了大约一分钟,然后返回:

connecting to: 127.0.0.1:12345/test 
2016-10-31T11:31:39.727-0700 I NETWORK [thread1] Socket recv() errno:10054 An existing connection was forcibly closed by the remote host. 127.0.0.1:12345 
2016-10-31T11:31:39.727-0700 I NETWORK [thread1] SocketException: remote: (NONE):0 error: 9001 socket exception [RECV_ERROR] server [127.0.0.1:12345] 
2016-10-31T11:31:39.728-0700 E QUERY [thread1] Error: network error while attempting to run command 'isMaster' on host '127.0.0.1:12345' : 
[email protected]/mongo/shell/mongo.js:231:14 
@(connect):1:6 

exception: connect failed 

这种背景下,我也有一个Amazon RDS运行MySQL和监听EC2实例上的端口3306以及本地计算机上的SSH隧道映射端口6789到EC2实例上的端口3306,并且我没有问题通过mysql -P 6789 -u user_name -p连接到MySQL数据库,所以问题只针对MongoDB。

至于连接,我有腻子的keepalive选项设置为1,和两个SSH隧道口下面的PowerShell脚本测试返回true,因此隧道肯定是连接:

function test-connection{ 
    param($IP,$PORT) 
    $connected = $FALSE 
    $s = New-Object Net.Sockets.TcpClient 
    try{ 
     $s.Connect($IP,$PORT) 
     $connected = !!$s.connected 
    }catch{ 
     #PASS 
    }finally{ 
     $s.close() 
    } 
    $connected 
} 
test-connection "127.0.0.1" 12345 
test-connection "127.0.0.1" 6789 

回答

0

检查bindIp你mongod.conf

这指定了mongod可以侦听的IP地址。默认情况下,它只接受本地主机

+0

我忘记提及我已经注释掉这行'bindIp:127.0.0.1#只听本地接口,在'/etc/mongod.conf'中监听所有接口上的注释' 。 – Jthorpe

+0

我也尝试将bindIp设置为“0.0.0.0”,但问题仍然存在。 – Jthorpe