我已经在 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, e.g. 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, e.g. start mongod
start mongod
也不会影响任何东西。尝试在没有帮助的情况下也查看 Mongo daemon doesn't run by service mongod start。
mongod --config /your/path/to/mongod.conf
似乎也不起作用,只是锁定了。下面的错误是标准的,因为当然没有 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 没有您在传统系统上习惯的初始化系统。 docker 所做的是用您在 CMD
或 ENTRYPOINT
Dockerfile 命令中指定的进程替换 PID 1。现在,忽略 ENTRYPOINT
,因为它替换了运行 CMD
的内容(通常是 /bin/sh -c
)。您需要使用 CMD
命令指示 docker 在您的 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 或配置数据,然后启动一个新容器。祝你好运! Here 是关于 Dockerizing MongoDB 的更多信息,但请记住,那里描述的方法更改了 Dockerfile 中的 ENTRYPOINT
,这涉及更多一点,需要更好地了解 Dockerfiles 中发生的事情。
关于mongodb - 通过 ssh 启动时出现 Docker 容器 mongod 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30111212/