我如何才能看到mongo正在从mongo shell中侦听哪些端口?

jco*_*lum 91 mongodb

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

"connections" : {
    "current" : 3,
    "available" : 816
Run Code Online (Sandbox Code Playgroud)

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

Der*_*ick 214

您可以通过运行以下命令从操作系统shell执行此操作:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo
Run Code Online (Sandbox Code Playgroud)

  • @SmartyTwiti我明确要求使用mongo shell的命令; lsof不起作用 (4认同)

Ada*_*ord 67

从您可以使用的系统shell lsof(请参阅下面的Derick的答案)或netstat -an查看进程实际执行的操作.但是,假设您只能访问mongoshell(问题标题所暗示的),那么您可以运行该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
}
Run Code Online (Sandbox Code Playgroud)

如果您没有传递上述特定端口选项,则默认情况下mongod将在27017和28017(http控制台)上进行侦听.注意:还有一些其他参数可以在不明确的情况下更改端口,请参见此处:

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

  • 对 - 如果它根本没有指定(在你的情况下似乎是这样)那么一切都是默认值,这会让你进入27017 (5认同)
  • 我的结果是:`{"argv":["mongod"],"解析":{},"ok":1}`这对我来说并不多.我猜它告诉我我在默认端口. (4认同)

Gan*_*anu 29

试试这个:

db.runCommand({whatsmyuri : 1})
Run Code Online (Sandbox Code Playgroud)

它将显示IP地址和端口号.

  • 这似乎显示了shell的端口或其他东西......来自`lsof`的输出:> mongod 14942 dmitrii 5u IPv4 0xc36ad5231f84011d 0t0 TCP*:27017(LISTEN)并且来自`whatsmyurl`命令:{"你":"127.0.0.1:50294" ,"好":1}他们不匹配. (6认同)

Gat*_* VP 11

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

MongoDB支持一个getParameter命令,但只有在你已经连接到数据库时才有效(此时你已经知道了端口).

  • 嗯,所以我们可以说,如果我已经连接但不知道端口,它必须是27017.如果端口不是27017,我必须知道端口才能连接.听起来不对? (2认同)