强制MongoDB副本集在创建过程中使用IP代替主机名

时间:2019-02-20 04:03:42

标签: mongodb docker ip-address hostname replicaset

我正在通过Mongo Cloud Manager设置MongoDB副本集。两个具有随机主机名的Mongo实例正在docker容器内运行。在创建期间,MongoDB在配置中将容器的主机名设置为成员的主机(rs.conf()。members [i] .host字段)。因此,我无法访问此副本集,因为从容器外部看不到容器的主机名。

我不想在容器的主机上进行任何其他手动设置以使容器的主机名可见(因为Docker已经设置了网络,并且容器具有可从外部访问的特定IP)。

是否有一种方法可以在创建副本集期间强制MongoDB使用IP而不是主机名?

我尝试使用bind_ip选项,但收到错误:“无效的配置:bind_ip 172.17.0.2不包含有效的本地主机地址”

感谢您的光临!非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

就目前而言,我决定在使用Mongo Cloud Automation Agent运行Docker映像时,传递--hostname和容器主机的IP地址(受@Joe的评论启发)。我知道这是一个非常丑陋的解决方案,但我相信这是可以的,因为容器内没有其他与mongo相关的东西(由自动化控制)。

对于专用于仅在本地(在容器的主机上)使用的DB,我只是传递容器的静态IP(我使用带有已配置网络的docker-compose,并将其设置为容器的静态IP)

其他解决方案,例如手动创建副本集并导入到Mongo CLoud Manager(我认为是最相关的解决方案),或者在通过mongo控制台创建部署后尝试手动修复主机,对我而言,这些解决方案都不值得其复杂性。 / p>