Mongo守护程序不是由服务mongod启动运行的

时间:2014-08-12 18:00:52

标签: linux mongodb ubuntu docker ubuntu-14.04

最近我通过阅读此页面(http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/)安装了mongodb软件包。 我使用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:

# mongo
2014-08-12T17:42:44.431+0000 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2014-08-12T17:42:44.432+0000 Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed at src/mongo/shell/mongo.js:146
exception: connect failed

好吧,谷歌搜索后,我检查了(applaied)来自Mongodb in linux serverhttps://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
...

这里发生了什么?我完全糊涂了(

1 个答案:

答案 0 :(得分:5)

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映像:

https://registry.hub.docker.com/_/mongo/

相关问题