最近我通过阅读本页(
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/)安装了mongodb软件包.
我使用docker和ubuntu 14.04映像来部署我的服务器.
我使用docker和ubuntu 14.04映像来部署我的服务器.
问题始于首先运行mongod服务:
- # service mongod start
我得到以下内容:
- Rather than invoking init scripts through /etc/init.d,use the service(8)
- utility,e.g. service mongod restart
- Since the script you are attempting to invoke has been converted to an
- Upstart job,you may also use the stop(8) and then start(8) utilities,e.g. stop mongod ; start mongod. The restart(8) utility is also available.
我试过这个:
- # start mongod
但没有输出.
接下来我想查看日志,但没有日志!
- ls /var/log/mongodb -a #empty
好的,接下来我尝试启动mongo shell:
好吧,谷歌搜索后我检查(applaied)从Mongodb in linux server和https://wiki.archlinux.org/index.php/MongoDB(部分故障排除)的所有答案,但仍然没有得到任何结果.
mongo shell只有在我直接在后台运行mongod时才能工作:
- mongod --verbose &
- [DataFileSync] BackgroundJob starting: DataFileSync
- shardKeyTest passed
- isInRangeTest passed
- shardObjTest passed
- [initandlisten] MongoDB starting : pid=451 port=27017 dbpath=/data/db 64-bit host=a9d816faea4c
- [initandlisten] db version v2.6.4
- [initandlisten] git version: 3a830be0eb92d772aa855ebb711ac91d658ee910
- [initandlisten] build info: Linux build7.nj1.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49
- [initandlisten] allocator: tcmalloc
- [initandlisten] options: { systemLog: { verbosity: 1 } }
- [initandlisten] flushing directory /data/db
- [initandlisten] journal dir=/data/db/journal
- [initandlisten] recover : no journal files present,no recovery needed
- [initandlisten] flushing directory /data/db/journal
- [initandlisten] flushing directory /data/db/journal
- [initandlisten] opening db: local
- [initandlisten] enter repairDatabases (to check pdfile version #)
- [initandlisten] local
- [initandlisten] done repairDatabases
- [initandlisten] opening db: admin
- [initandlisten] query admin.system.roles planSummary: EOF ntoreturn:0 ntoskip:0 keyUpdates:0 numYields:0 locks(micros) W:119 r:106 nreturned:0 reslen:20 0ms
- [ClientCursorMonitor] BackgroundJob starting: ClientCursorMonitor
- [PeriodicTaskRunner] BackgroundJob starting: PeriodicTaskRunner
- [TTLMonitor] BackgroundJob starting: TTLMonitor
- [initandlisten] fd limit hard:1048576 soft:524288 max conn: 419430
- [IndexRebuilder] BackgroundJob starting: IndexRebuilder
- [IndexRebuilder] opening db: local
- [initandlisten] create collection local.startup_log { size: 10485760,capped: true }
- [initandlisten] command local.$cmd command: create { create: "startup_log",size: 10485760,capped: true } ntoreturn:1 keyUpdates:0 numYields:0 reslen:75 0ms
- [initandlisten] insert local.startup_log ninserted:1 keyUpdates:0 numYields:0 0ms
- [initandlisten] waiting for connections on port 27017
- [IndexRebuilder] checking complete2014-08-12T17:48:29.837+0000 [DataFileSync] BackgroundJob starting: DataFileSync
现在我有以下内容:
- /var/lib/mongodb (mongodb:mongodb) empty
- /var/log/mongodb (mongodb:nogroup) empty
- /data/db (mongo:nogroup) #useless
- # mongod.conf
- dbpath=/var/lib/mongodb
- logpath=/var/log/mongodb/mongod.log
- logappend=true
- port = 27017
- bind_ip = 0.0.0.0
- ...
这里发生了什么?我很困惑(
解决方法
Docker容器通常没有完整的init系统,并且与upstart的交互在docker容器中不起作用. (从理论上说这是可能的,但它会破坏轻量堆叠的目的)
这意味着你启动一个docker容器,它会运行一个命令“/usr/bin/mongod”
在docker容器中运行mongodb的示例:
https://docs.docker.com/samples/library/mongo/
此外,由于您使用交互式docker容器运行安装命令,因此只要考虑docker,shell解释器就是单个命令.进入交互式会话后,您可以在后台运行mongod(正如您所做的那样)并启动mongo客户端会话.
另一种方法是将这些说明作为Dockerfile的一部分运行.您可以参考mongodb example.
您可能还想考虑已经在docker hub中发布的一些官方mongo db映像: