【问题标题】:Cannot connect to mongodb using machine ip无法使用机器 ip 连接到 mongodb
【发布时间】:2019-12-04 12:52:21
【问题描述】:

使用homebrew 安装Mongo。如果我在 shell 上输入mongo,它会连接到test。但是当我输入本地机器的ip address而不是127.0.0.1

mongo --host 192.168.1.100 --verbose

它给了我错误信息

MongoDB shell version: 2.4.6
Fri Aug 23 15:18:27.552 versionArrayTest passed
connecting to: 192.168.1.100:27017/test
Fri Aug 23 15:18:27.579 creating new connection to:192.168.1.100:27017 
Fri Aug 23 15:18:27.579 BackgroundJob starting: ConnectBG
Fri Aug 23 15:18:27.580 Error: couldn't connect to server 192.168.1.100:27017 at src/mongo/shell/mongo.js:147
Fri Aug 23 15:18:27.580 User Assertion: 12513:connect failed

已尝试通过评论 bind_ip 或将 IP 地址从 127.0.0.1 更改为 0.0.0.0 来修改 mongo.conf,但没有成功。这应该很简单,但现在不知道。使用 mac。

谢谢

更新:根据要求。在我按照您的建议进行更改后,此方法有效。

ifconfig 输出

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
   options=3<RXCSUM,TXCSUM>
   inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
   inet 127.0.0.1 netmask 0xff000000 
   inet6 ::1 prefixlen 128 
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
   options=b<RXCSUM,TXCSUM,VLAN_HWTAGGING>
   ether XX:XX:XX:
   media: autoselect (none)
   status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
   ether XX:XX:XX:XX:01 
   inet6 XXXX:XXXX:XXXX: %en1 prefixlen 64 scopeid 0x5 
   inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
   media: autoselect
   status: active
 p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
   ether XX:XX:XX:XX:XX
   media: autoselect
   status: inactive
 fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078
   lladdr XX:XX:XX:XX
   media: autoselect <full-duplex>
   status: inactive

执行命令时的输出mongo --host 192.168.1.100 --verbose

MongoDB shell version: 2.4.5
Fri Aug 23 16:42:09.806 versionArrayTest passed
connecting to: 192.168.1.100:27017/test
Fri Aug 23 16:42:09.837 creating new connection to:192.168.1.100:27017
Fri Aug 23 16:42:09.837 BackgroundJob starting: ConnectBG
Fri Aug 23 16:42:10.129 connected connection!
Server has startup warnings: 
Fri Aug 23 16:41:59.025 [initandlisten] 
Fri Aug 23 16:41:59.025 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000

文件mongod.conf

# Store data in /usr/local/var/mongodb instead of the default /data/db
dbpath = /usr/local/var/mongodb

# Append logs to /usr/local/var/log/mongodb/mongo.log
logpath = /usr/local/var/log/mongodb/mongo.log
logappend = true

# Only accept local connections
bind_ip = 0.0.0.0`

【问题讨论】:

  • 防火墙问题是我的第一个猜测。不了解 Mac,所以我无法真正指导您。
  • 我在 Mac 和同一台机器上尝试过使用 no firewall。我可以使用 ip ping 自己,但无法通过 mongo 连接。

标签: mongodb


【解决方案1】:

我刚刚在我的 Mac 上使用 Homebrew 进行了测试,效果很好如果您更改了绑定地址。我怀疑你可能只是没有得到正确的绑定配置?

所以我们有所有的信息,你能粘贴ifconfig的输出吗?

默认情况下,MongoDB 应该侦听所有接口,您不需要更改配置,但是 Homebrew 设置似乎覆盖了这个 (/usr/local/etc/mongod.conf):

# Only accept local connections
bind_ip = 127.0.0.1

请杀死 MongoDB 并运行它(注意 -v):

$ mongod --bind_ip 0.0.0.0 -v
warning: bind_ip of 0.0.0.0 is unnecessary; listens on all ips by default
all output going to: /usr/local/var/log/mongodb/mongo.log

请粘贴您的输出?

然后尝试一下:

$ mongo --host 192.168.43.2 --verbose
MongoDB shell version: 2.4.6
Sat Aug 24 09:07:14.556 versionArrayTest passed
connecting to: 192.168.43.2:27017/test
Sat Aug 24 09:07:14.657 creating new connection to:192.168.43.2:27017
Sat Aug 24 09:07:14.657 BackgroundJob starting: ConnectBG
Sat Aug 24 09:07:14.657 connected connection!
Server has startup warnings: 
Sat Aug 24 09:06:44.360 [initandlisten] 
Sat Aug 24 09:06:44.360 [initandlisten] ** WARNING: soft rlimits too low. Number of files     is 256, should be at least 1000
> 

显然将其替换为您的 IP 地址。让我们知道这是怎么回事。

【讨论】:

  • 但我还是不要t get it. Why this did not work when I modified mongo.conf`文件接受bind_ip 0.0.0.0
  • @java_dude 嗯,这听起来很奇怪。你能检查一下你的/usr/local/var/log/mongodb/mongodb.log 文件吗?
  • 我应该在日志文件中查找什么?顺便说一句,用mongod.conf 内容更新问题
  • @java_dude 我刚刚注意到(这可能只是一个错字)您的“bind_ip”行不是以“0”结尾,而是带有一个勾号“`”......如果这是直接复制/粘贴我猜这将是问题
  • 如果 mongod --bind_ip 0.0.0.0 -v 失败,然后指定您想要数据的路径,然后运行命令 mongod --bind_ip 0.0.0.0 -v -dbpath ""
【解决方案2】:

成功:

  1. 更改服务配置文件 C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg
# network interfaces (wjp: comment bindIp listening on all IPs)
net:
  port: 27017
#  bindIp: 127.0.0.1
  bindIp: 0.0.0.0
  1. 重启mongodb服务(或重启电脑);
  2. 确保机器级防火墙打开端口 27017
  3. 连接正常。

【讨论】:

    【解决方案3】:

    没有 其实,如果你想从任何ip访问rest接口,你不需要在mongod.conf中将bind_ip设置为0.0.0.0,你只需要注释或删除其中的配置项,类似

    #bind_ip=127.0.0.1
    

    然后,重启你的服务,你会发现你的机器可以从28017端口访问其余服务

    【讨论】:

    • 这是一种不好的做法!
    • 这行得通。我用它把它绑定到我的内部服务器网络地址,而不是把它注释掉,并使用外部防火墙将它暴露给授权的 IP 地址。谢谢。
    【解决方案4】:

    对我来说,我将 bindIp 替换为 bindIpAll: true(有关详细信息,请参阅 http://docs.mongodb.org/manual/reference/configuration-options/)。

    这是我的 mongod.conf 文件的内容。

    # mongod.conf
    
    # for documentation of all options, see:
    #   http://docs.mongodb.org/manual/reference/configuration-options/
    
    # Where and how to store data.
    storage:
      dbPath: /var/lib/mongodb
      journal:
        enabled: true
    #  engine:
    #  mmapv1:
    #  wiredTiger:
    
    # where to write logging data.
    systemLog:
      destination: file
      logAppend: true
      path: /var/log/mongodb/mongod.log
    
    # network interfaces
    net:
      port: 27017
      # bindIp: 127.0.0.1
      bindIpAll: true
    
    
    # how the process runs
    processManagement:
      timeZoneInfo: /usr/share/zoneinfo
    
    #security:
    
    #operationProfiling:
    
    #replication:
    
    #sharding:
    
    ## Enterprise-Only Options:
    
    #auditLog:
    
    #snmp:
    

    【讨论】:

      【解决方案5】:

      注意:以下配置适用于 windows 10 & MongoDB 4.0

      有两种配置方式。

      1. 使用 shell 命令。
      2. 或通过mongod.cfg

      使用 shell 命令

      首先打开cmdadministrator,然后转到--YourPath--\MongoDB\Server\4.0\bin

      1. 如果您已经在运行 MongoDB 服务,则运行此命令,否则转到第二点。mongod --remove

      2. 然后使用以下命令设置数据文件夹、日志文件和 ip 绑定的路径

        mongod --dbpath "C:\Program Files\MongoDB\Server\4.0\data" --logpath "C:\Program Files\MongoDB\Server\4.0\log\mongod.log" --bind_ip "0.0.0.0" --install --serviceName "MongoDB"

      注意:此 ip 配置允许通过网络访问您的数据库。

      1. 现在转到services.msc 并找到MongoDB,然后右键单击-> 启动 服务。

      通过mongod.cfg

      MongoDB 在此处为Configuration 提供了非常好的文档。

      只需将bindIp: 127.0.0.1 更改为bindIp: 0.0.0.0。然后使用上述主题中的#3 点重新启动服务。

      【讨论】:

        猜你喜欢
        • 2019-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-15
        • 1970-01-01
        • 1970-01-01
        • 2021-04-01
        相关资源
        最近更新 更多