6

I have installed mongoDB on a redhat virtual machine on EC2.

The server is running perfectly locally, I can connect and execute commands, etc. Now, I tried connecting remotely from another virtual machine on EC2 but I can't get to connect regardless how much I'm trying. At first I thought it was a problem of security groups, so I tried enabling all ports from within the group (both virtual machines belong to the same secirity groups) I also enabled connections in the iptables file (and yes, restarted the service) but it still doesn't work... Any ideas on what the problem could be?

the error I get is:

MongoDB shell version: 2.0.2
connecting to: ec2-XXXX.eu-west-1.compute.amazonaws.com/test
Thu Jan  5 13:55:32 Error: couldn't connect to server ec2-XXXX.eu-west-1.compute.amazonaws.com shell/mongo.js:86
exception: connect failed

Thank in advance.

Regarding the "bind_ip" setting, well.. there is no default value for that, I mean there even is no bind_ip line on the mongodb.conf, by default. I was probably expecting something like bind_ip = 127.0.0.1 so that I could comment it out, but it wasn't there, so I tried with bind_ip = 0.0.0.0 but still, it's not working either.

5 Answers 5

6

Hopefully this helps. You need to explicitly tell mongodb to listen on non-localhost devices. By default it runs only on localhost.

From http://www.mongodb.org/display/DOCS/Security+and+Authentication:

IP Address Binding By default, a mongod server will listen on all available IP addresses on a machine. You can restrict this to a single IP address with the 'bind_ip' configuration option for mongod.

Typically, this would be set to 127.0.0.1, the loopback interface, to require that mongod only listen to requests from the same machine (localhost).

To enable listening on all interfaces, remove the bind_ip option from your server configuration file.

Update: I guess I was confused myself. I thought the default behavior was different than what was described above. (Maybe it used to be?) In any case, you should check your mongo config file to make sure that you have it configured as you expect.

3
  • oh yes, I checked on that too, regarding the "bind_ip" setting, well.. there is no default value for that, I mean there even is no bind_ip line on that, by default. I was probably expecting something like bind_ip = 127.0.0.1 but it wasn't there, so I tried with bind_ip = 0.0.0.0 but still, it's not working... Jan 6, 2012 at 0:32
  • 1
    On Ubuntu, in the /etc/mongod.conf file, it says to simply remove the line that sets bind_ip altogether, and that will allow mongo to listen to all interfaces. (Commenting out this line fixed it for me).
    – KEW
    May 23, 2014 at 21:32
  • This did it for me , commenting out the bind_ip line worked. Thanks. Can't believe I wasted half hour for this
    – Chenna V
    Jul 31, 2015 at 15:30
6

SOLVED! to anyone who is using EC2 default redhat installation, you need to run this command:

system-config-firewall-tui

1
  • 1
    Does this work only for redhat? I mean I have Ubuntu installed on EC2 and just wondering to access to MongoDB remotely and ended up here. Thanks
    – Maziyar
    Mar 24, 2013 at 11:57
4

With mongoDB server version 3.6.4, Ubuntu 16.4.4 I solved this by setting the net section in /etc/mongod.conf like this:

net:
  port: 27017
  bindIpAll: true
#  bindIp: 127.0.0.1
1

Glad to see that the firewall modification solved the issues. Don't forget the other EC2 recommendations (noatime on filesystem, communication across regions and others) here:

http://www.mongodb.org/display/DOCS/Amazon+EC2

There is also an excellent whitepaper on how to scale and deploy on EC2:

http://d36cz9buwru1tt.cloudfront.net/AWS_NoSQL_MongoDB.pdf

1

If you are using aws, make sure that the security group allows port 27017. I wasted two hours of my life figuring that out.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .