发布于

Docker中运行mongoDB

Authors
  • avatar
    Name
    田中原
    Twitter

Docker中运行mongoDB

在Docker中使用MongoDB

通过Docker运行Mongo

docker run --name [name] -p 27017:27017 -v /data/db:/data/db -d mongo
  • -v/data/db:/data/db 将主机的/data/db文件夹挂载在容器内的/data/db

    在docker容器中运行MongoDB所产生的数据会保存在容器内部,容器停止后数据也将随之消失无法得到保存。所以为了将容器中的数据持久化,需要使用docker的数据卷,将主机上的文件夹映射到容器内部。这样容器运行时所产生的数据将会保存在主机的文件中。

    NOTE: mac os 需要在Docker -> Preferences… -> File Sharing中添加共享的目录

  • -p 27017:27017将容器内mongo的默认27017端口映射至主机的27017端口

  • -d后台运行

  • —auth开启Mongo的验证

进入Mongo shell

在主机上进入

docker exec -it <YOUR-NAME> mongo

设置管理员/用户

{
  user:'testUser
  pwd:'testPass',
  roles:[{role:'readWrite',db:'test'}]
}

验证

通过本地mongo shell 连接远程服务器的mongoDB

mongo  xx.xx.xx.xx:xxx/test -u "admin" -p "adminPass"
问题

在阿里云上通过docker运行mongo,在本地使用mongo尝试连接,连接不上

MongoDB shell version v3.4.0

connecting to: mongodb://xx.xx.xx.xx:xxxx

2017-09-08T16:16:28.584+0800 W NETWORK  [main] Failed to connect to 47.52.30.225:25714 after 5000 milliseconds, giving up.

2017-09-08T16:16:28.587+0800 E QUERY    [main] Error: couldn't connect to server xx.xx.xx.xx:xxxx, connection attempt failed :

connect@src/mongo/shell/mongo.js:234:13

@(connect):1:6

exception: connect failed
解决

在本地连接不上远程的数据库是因为我将docker端口和服务器端口映射写反了。

出现类似的问题应该如何排查

  1. 检查端口号配置
  2. 检查账号密码设置
  3. 检查阿里云安全组设置

购买的云主机服务,初始的时候除了ssh外的端口,所有对外的端口都是被屏蔽的。需要去手动去阿里云的安全组中将需要用到的端口配置打开,在外网才能访问