远程连接docker下的mongodb

很稳!方法很直接、很有效。

由于没有亲手配置过docker,所以不是特别地熟练这些原理。下面来简要地叙述一下我的心酸历程。

(1)目的

服务器系统是linux下的ubuntu 16.04

假设目标主机ip为10.10.12.119   记为IP1

测试主机ip为10.10.12.120  记为IP2

目的使用IP2主机连接IP1主机下docker中的mongodb,注意不是直接连接IP1下的moongodb

(2)小试一下

在10.10.12.120下输入命令$ mongo 10.10.12.119:27017 (因为我们常用的端口为27017),此时连接的是IP1的数据库,而非IP1下的docker中的数据库。那么如何获取docker中的数据库呢?这也是我们本文的重点,下面也不过多讲述我的心酸了,直接上方法把。

(3)步骤

参考链接https://blog.****.net/hp_satan/article/details/77531794

首先将docker中mongo数据库的端口27017映射到IP1下的一个端口。具体做法如下:

(a)查看docker名称

$docker ps

远程连接docker下的mongodb

(b)获取容器docker的ip

$docker inspect $container_name | grep IPAddress

其中$container_name为NAME值zgd

远程连接docker下的mongodb

(c) 添加转发规则

$iptables -t nat -A DOCKER -p tcp --dport $host_port -j DNAT --to-destination $docker_ip:$docker_port

例如将docker中的27017映射到IP1的27917端口 ,当然此步骤过程中一定要先看看此端口是否被占用,找一个便于牢记和方便使用的未占用的端口作为映射端口,这里我选择27917.

远程连接docker下的mongodb

(d) 使配置生效

先来说一下没解决成功的思路,截止到现在不能成功的具体原因我也不知道是什么?

修改mongo配置文件改为0.0.0.0,或者将ip=127.0.0.1给注释掉。然后重启mongo

 远程连接docker下的mongodb

执行$service mongodb start。结果竟然是启动失败,然后执行$ service mongodb stop,再执行重启mongo服务,还是启动失败。

然后就强制kill掉mongo的进程,结果还是重启mongo服务失败。

然后$mongod -h看看有没有什么方法,找到了一个绑定所有ip的命令,如下图

远程连接docker下的mongodb
  还是查看有没有mongo进程在使用,有的话就杀掉

远程连接docker下的mongodb

然后就是使用这个选项绑定所有ip的选项

$nohup mongod --bind_ip_all &

或者直接使用$ mongo --bind_ip_all

远程连接docker下的mongodb

(4)测试一下

然后在IP2上使用命令$ mongo 10.10.12.119:27917发现可以正常登陆到IP1上的mongo数据库。

然后就一切OK了。