Docker 通过 ssh 启动时容器 mongod 错误

Docker container mongod error when starting via ssh

我已经在 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 所做的是 PID 1 替换为您在 CMD or ENTRYPOINT Docker 文件命令中指定的进程。现在,请忽略 ENTRYPOINT,因为它会将您的 CMD 替换为 运行(通常是 /bin/sh -c)。您需要使用 CMD 命令指示 docker 在 Docker 文件中启动 mongod 服务,例如:

CMD usr/bin/mongod

当你 运行 你的容器时,mongod 将是你的 PID 1。现在,你可能想知道这一点 "But what about my SSH server?" 答案是:不要 运行 docker 容器上的 SSH 服务器。有 一些用例,其中 运行 连接 SSH 服务器没问题,但几乎所有 "normal" 原因(调试、C&C 等)都被"best practice" 在您的容器上获得 shell:

docker exec -it myContainer /bin/bash

这会将您放入 运行ning 容器中的 shell。此处关于管理 docker 容器中的配置和更改的建议是使用 Ansible 之类的东西。但是,请记住 docker 容器是短暂的,您不应该重新启动服务并更改它们的配置状态。如果您需要更改配置,请更改 Docker 文件或配置数据,然后启动一个新容器。祝你好运! Here 是关于 Docker 化 MongoDB 的更多信息,但请记住,那里描述的方法改变了 Docker 文件中的 ENTRYPOINT,即涉及更多,需要更好地了解 Docker 文件中发生的事情。

这真的很有帮助。我试图通过创建几个空白容器让旧的 Ansible 剧本与 Docker 一起工作,然后让 Ansible 完成其余的工作。

它通过命令工作 mongod --dbpath /var/lib/mongodb --smallfiles