更改MongoDB服务器的名称

更改MongoDB服务器的名称,mongodb,Mongodb,在MongoDB中,如何更改服务器/守护进程的名称,或使用localhost以外的名称创建新服务器?文档指定了一种使用特定名称连接到服务器的方法,例如localhost(mongo命令上的--host选项),以及指定复制集中每个服务器的名称的方法,我现在忘记了这一点,但不是一种方法,用于说出要为mongod命令创建实例的服务器的名称。它似乎必须是localhost 我有node.js和apache,所以我可以使用虚拟主机,而且我显然有一个hosts文件(/etc/hosts在Unix上,比如操作

在MongoDB中,如何更改服务器/守护进程的名称,或使用
localhost
以外的名称创建新服务器?文档指定了一种使用特定名称连接到服务器的方法,例如
localhost
mongo
命令上的
--host
选项),以及指定复制集中每个服务器的名称的方法,我现在忘记了这一点,但不是一种方法,用于说出要为
mongod
命令创建实例的服务器的名称。它似乎必须是
localhost

我有
node.js
apache
,所以我可以使用虚拟主机,而且我显然有一个
hosts
文件(
/etc/hosts
在Unix上,比如操作系统和
C:\WINDOWS\System32\drivers\etc\hosts
在WINDOWS上),所以我可以创建一个与
localhost
不同名称的服务器,但问题是,我可以使用内置命令(如
mongod
)或配置文件来执行此操作吗?

与HTTP协议不同(在Apache等web服务器上运行的web应用程序使用HTTP协议),在确定如何处理传入请求时,不会使用主机名。这意味着您的MongoDB服务器没有主机名或virtualhost指令的等效项

MongoDB服务器配置文件允许您执行以下操作。绑定IP配置选项指定服务器侦听传入连接的IP地址。例如,这可能是:
127.0.0.1
(又称
localhost
)、以逗号分隔的IP地址列表,或者如果未指定绑定IP限制,则可能是所有网络接口

当您连接到MongoDB并在命令行或驱动程序选项中指定主机名时,此名称必须能够从外部角度解析。您可以使用希望在MongoDB之外创建的任何形式的可解析主机名(例如,在
/etc/hosts
文件或DNS中)。只要MongoDB服务器正在侦听主机名解析到的IP(并且没有防火墙或网络连接问题),您就应该能够连接,而不管使用的主机名是什么

例如,
localhost
是环回IP地址(127.0.0.1)可用的默认名称,应始终进行定义。。通常,您的计算机还将定义一个唯一的主机名。您可以使用
getHostName()
mongo
shell中检查默认主机名解析为什么:

假设没有绑定IP限制,主机名为
Webscale.local
,IP地址为
192.168.1.1
,则您将能够连接到以下任意主机:

  • 本地网站
  • 192.168.1.1
  • 本地主机
  • 127.0.0.1

利用Docker环境,创建两个容器,一个用于您的Mongo服务器,另一个用于您的应用程序,在一个Docker-compose.yml文件中运行两个容器,指定您的应用程序容器将依赖于您的Mongo容器,然后将应用程序中的连接字符串“localhost”替换为您的Mongo容器的名称。参考以下两个片段:

docker compose.yml

version: '3'
 services:
   img_flaskapp:
      build: ./Flask/gie
      container_name: flaskapp
      ports:
        - "8000:8000"
      depends_on: 
        - img_mongodb
   img_mongodb:
      image: mongo
      container_name: mongodb
      ports:
       - "27017:27017"
应用程序代码

connect (host="mongodb://mongodb:27017/nameofyourdb")

您是否正在寻找将客户端连接到本地主机以外的mongod接口的方法?如果是这样,我将检查bindip选项是否设置为mongod的参数或在mongod.conf文件中。此选项可能会将mongod限制为本地接口。不,我正在寻找一种方法,将服务器命名为除
localhost
之外的其他名称,即使它位于我的本地计算机上。我不需要连接到任何其他机器,这个问题也不要求连接。在您的问题中,您声明“文档指定了一种连接到具有特定名称的服务器的方式”。这意味着将客户端连接到mongod实例。mongod本身没有在副本集定义之外配置“名称”信息-当运行副本集时。@JamesWahlin,这很令人失望,但如果这是答案,那就是答案。如果你这样做,我会接受的。为什么让人失望?你想解决的问题是什么?当mongod在服务器上启动时,它会打开一个端口,任何可以连接到该端口的客户机都可以使用该端口(如果接口不受bindip选项的限制)。这意味着您应该能够通过--host与localhost、hostname或IP地址中的任意一个连接shell。那么这是否意味着每个MongoDB-counts-as-a-computer只能有一个MongoDB服务器(无复制/分片)?@trysis否,您仍然可以在同一台服务器上运行绑定到不同端口的多个实例。看到了吗,我怎么没想到呢?另外,如果你有一台具有多个IP地址的计算机,你也可以通过这种方式拥有多台服务器。看起来你可以使用虚拟主机。您不能使用
bindIp
参数。这真的很奇怪,因为在我的
hosts
文件中,我将许多主机绑定到127.0.0.1,但如果我不绑定到127.0.0.1,我只能通过名称连接到它们。@trysis:通常情况下,您不希望在同一个VM/主机实例中运行多个数据库服务器(即类似于“virtualhost”的方式)在Apache配置中,正在运行一个web服务器实例(侦听多个主机名)。与为同一个数据库服务器设置大量主机名不同,我建议您为应用程序使用不同的数据库名和凭据。这将更易于管理(并且不是MongoDB特有的)。
connect (host="mongodb://mongodb:27017/nameofyourdb")