远程连接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
(b)获取容器docker的ip
$docker inspect $container_name | grep IPAddress
其中$container_name为NAME值zgd
(c) 添加转发规则
$iptables -t nat -A DOCKER -p tcp --dport $host_port -j DNAT --to-destination $docker_ip:$docker_port
例如将docker中的27017映射到IP1的27917端口 ,当然此步骤过程中一定要先看看此端口是否被占用,找一个便于牢记和方便使用的未占用的端口作为映射端口,这里我选择27917.
(d) 使配置生效
先来说一下没解决成功的思路,截止到现在不能成功的具体原因我也不知道是什么?
修改mongo配置文件改为0.0.0.0,或者将ip=127.0.0.1给注释掉。然后重启mongo
执行$service mongodb start。结果竟然是启动失败,然后执行$ service mongodb stop,再执行重启mongo服务,还是启动失败。
然后就强制kill掉mongo的进程,结果还是重启mongo服务失败。
然后$mongod -h看看有没有什么方法,找到了一个绑定所有ip的命令,如下图
还是查看有没有mongo进程在使用,有的话就杀掉
然后就是使用这个选项绑定所有ip的选项
$nohup mongod --bind_ip_all &
或者直接使用$ mongo --bind_ip_all
(4)测试一下
然后在IP2上使用命令$ mongo 10.10.12.119:27917发现可以正常登陆到IP1上的mongo数据库。
然后就一切OK了。