我已经在docker容器上安装了mongodb和ubuntu 14.04上的openssh。 容器正在运行ssh,但是当我ssh进入容器时,我尝试启动mongod时出现以下错误。
root@430f9502ba2d:~# service mongod start Rather than invoking init scripts through /etc/init.d, use the service(8) utility, eg service mongod start Since the script you are attempting to invoke has been converted to an Upstart job, you may also use the start(8) utility, eg start mongod
另外start mongod
不会影响任何东西。
试着看这个Mongo守护进程没有服务mongod启动没有它的帮助。
mongod --config /your/path/to/mongod.conf
似乎也不起作用,只是locking。
下面的错误是标准的,当然没有mongod服务器运行。
root@430f9502ba2d:/# mongo MongoDB shell version: 2.6.9 connecting to: test 2015-05-07T20:49:56.213+0000 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused 2015-05-07T20:49:56.214+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
这里的问题是你的方法。 Docker没有像传统系统中习惯的init系统。 Docker所做的是用你在CMD
或ENTRYPOINT
Dockerfile命令中指定的进程替换 PID 1。 现在,忽略ENTRYPOINT
,因为它取代了你的CMD
运行(通常是/bin/sh -c
)。 您需要指示docker使用CMD
命令在您的Dockerfile中启动您的mongod服务,如:
CMD usr/bin/mongod
而当你运行你的容器时,mongod将成为你的PID 1.现在,你可能想知道在这一点上“但是我的SSH服务器呢? 答案是:不要在Docker容器上运行SSH服务器。 有一些用例可以运行SSH服务器,但几乎所有“正常”的原因(调试,C&C等)都被取消了,因为在你的容器上获得shell的“最佳实践”是:
docker exec -it myContainer /bin/bash
这会让你进入运行容器的shell。 这里推荐的用于管理Docker容器中的配置和更改的建议是使用Ansible。 但是,请记住,docker容器是短暂的,您不应该重新启动服务并更改它们的配置状态。 如果您需要更改配置,请更改Dockerfile或配置数据,然后启动新的容器。 祝你好运! 下面是关于Dockerizing MongoDB的一些信息,但是请记住,在那里描述的方法改变了ENTRYPOINT
中的入口点,这是一个更多的参与,需要更好地了解Dockerfiles中发生了什么。
这真的很有帮助。 我试图通过创建几个空白容器来让老的Ansible剧本与Docker一起工作,让Ansible完成剩下的工作。
它通过命令mongod --dbpath /var/lib/mongodb --smallfiles