docker中运行mongoDB

在docker中使用MongoDB

通过Docker运行Mongo

1
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

在主机上进入

1
docker exec -it <YOUR-NAME> mongo

设置管理员/用户

1
2
3
4
5
{
user:'testUser
pwd:'testPass',
roles:[{role:'readWrite',db:'test'}]
}

验证

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

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

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

1
2
3
4
5
6
7
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外的端口,所有对外的端口都是被屏蔽的。需要去手动去阿里云的安全组中将需要用到的端口配置打开,在外网才能访问