我怎样才能看到 mongo 正在从 mongo shell 监听哪些端口?

如果我有一个 mongo 实例正在运行,我怎样才能检查它正在从 shell 侦听什么端口号?我以为 db.serverStatus()可以做到,但是我没有看到。我看到了

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

Which is close... but no. Suggestions? I've read the docs and can't seem to find any command that will do this.

176602 次浏览

MongoDB 默认情况下只侦听一个端口(27017)。如果 --rest接口是活动的,端口28017(27017 + 1000)也将打开处理 Web 请求的详细信息。

MongoDB 支持 getParameter命令,但是只有当您已经连接到数据库(此时您已经知道端口)时才能工作。

你可以从壳层开始:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo

在系统 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

试试这个:

db.runCommand({whatsmyuri : 1})

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

你可以试试,从 mongo shell:

  • db.getMongo()

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

connection to <IP>:<PORT>
  • ()

For unsharded collections, explain returns the following serverInfo MongoDB 实例的信息:

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

默认 MongoDB 端口