我已经花了很长时间连接到 Dockerized MongoDB 实例。我能够为每个 MongoDB 容器配置一个这些说明在我的本地开发机器上,但相同的步骤似乎在生产中不起作用。
我创建、运行和连接容器的具体步骤:
创建并运行容器
docker run --name prod-mongo -p 27017:27017 -d mongo --auth
添加了初始用户:
docker exec -it prod-mongo mongo admin
db.createUser({user:'skipper', pwd:'skipperspassword', roles:[{role:'userAdminAnyDatabase',db:'admin'}] });
从另一个 Mongo 容器成功连接到 Docker 容器:
docker run -it --rm --link prod-mongo:mongo mongo mongo -u skipper -p --authenticationDatabase admin prod-mongo/skippers-apps
不成功从 Docker 主机连接到 Docker 容器:
mongo skippers-apps --authenticationDatabase admin -u skipper -p
我关心的是最后一步。它在我的本地开发环境中有效,但不能在生产环境中使用。
开发环境
- 操作系统:Mac OS El Capitan
- 内核版本 15.6.0
- MongoDB Shell 版本:3.2.7
- Docker 版本:1.12.3
生产环境
- 操作系统:Ubuntu 16.04.1 LTS
- 内核版本:4.4.0
- MongoDB Shell 版本:2.6.10
- Docker 版本:1.12.3
答案1
虽然我不确定为什么我之前使用的 MongoDB 版本(2.6.10)不能与 Docker 很好地兼容,但我能够通过升级 MongoDB 客户端的版本来解决问题。
我很好奇想知道 2.6.10 客户端无法连接到默认 Docker MongoDB 映像中的 MongoDB 服务器的确切原因。
解决方案:将 MongoDB 客户端从 2.6.10 升级到 3.2.11