【问题标题】:how can I see what ports mongo is listening on from mongo shell?如何查看 mongo 从 mongo shell 监听的端口?
【发布时间】:2021-02-12 20:44:18
【问题描述】:

如果我有一个 mongo 实例正在运行,我如何检查它从 shell 监听的端口号?我以为db.serverStatus() 会这样做,但我看不到。我看到了这个

"connections" : {
    "current" : 3,
    "available" : 816

这很接近......但没有。建议?我已经阅读了文档,似乎找不到任何可以执行此操作的命令。

【问题讨论】:

  • 你需要mongo shell吗?或者普通的unix shell会做吗? :)
  • @SergioTulentsev 我特别想知道这是否可能在 mongo shell 内部——因为我已经找到了接近的信息。

标签: mongodb


【解决方案1】:

您可以从操作系统外壳执行此操作,方法是运行:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo

【讨论】:

  • @SmartyTwiti 我明确要求使用 mongo shell 的命令; lsof 不起作用
【解决方案2】:

您可以在系统 shell 中使用 lsof(参见下面 Derick 的回答)或 netstat -an 来查看进程实际在做什么。但是,假设您只能访问 mongo shell(您的问题标题暗示),那么您可以运行 serverCmdLineOpts() 命令。该输出将为您提供命令行(argv)上传递的所有参数以及配置文件(已解析)中的参数,您可以根据该信息推断mongod 正在侦听的端口。这是一个例子:

db.serverCmdLineOpts()
{
    "argv" : [
        "./mongod",
        "-replSet",
        "test",
        "--rest",
        "--dbpath",
        "/data/test/r1",
        "--port",
        "30001"
    ],
    "parsed" : {
        "dbpath" : "/data/test/r1",
        "port" : 30001,
        "replSet" : "test",
        "rest" : true
    },
    "ok" : 1
}

如果您没有传递上述特定端口选项,则默认情况下mongod 将监听 27017 和 28017 (http console)。注意:还有一些其他参数可以在不显式的情况下更改端口,请参见此处:

https://docs.mongodb.org/manual/reference/configuration-options/#sharding.clusterRole

【讨论】:

  • 我的结果是:{ "argv" : [ "mongod" ], "parsed" : { }, "ok" : 1 } 这并没有告诉我太多。我想它告诉我我在默认端口上。
  • 对 - 如果根本没有指定(在你的情况下看起来像这样),那么一切都是默认值,这会让你进入 27017
【解决方案3】:

试试这个:

db.runCommand({whatsmyuri : 1})

它将同时显示 IP 地址和端口号。

【讨论】:

  • 是新的吗?它出现在哪个版本的 mongo 中?
  • @jcollum 3.0 版有这个新功能。
  • 这似乎显示了 shell 的端口或其他东西...来自lsof 的输出:>mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP *:27017 (LISTEN) And from whatsmyurl command: { "you" : "127.0.0.1:50294", "ok" : 1 } 他们不匹配。
  • 这个对我有用,在 docker 容器上运行 mongo。
【解决方案4】:

MongoDB 默认只监听一个端口(27017)。如果--rest 接口处于活动状态,则端口 28017 (27017+1000) 也将打开,以处理 Web 请求以获取详细信息。

MongoDB 支持getParameter 命令,但这仅在您已经连接到数据库时才有效(此时您已经知道端口)。

【讨论】:

  • 嗯,所以我们可以说,如果我已连接,但不知道端口,那一定是27017。如果端口不是27017,我必须知道端口才能连接。听起来对吗?
【解决方案5】:

你可以试试,从 mongo shell:

  • db.getMongo()

使用此命令测试 mongo shell 是否与 正确的数据库实例。

connection to <IP>:<PORT>
  • db.collection.explain()

对于非分片集合,explain 返回以下 serverInfo MongoDB 实例的信息:

"serverInfo" : {
   "host" : <string>,
   "port" : <int>,
   "version" : <string>,
   "gitVersion" : <string>
}

Default MongoDB Port

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多