2015-05-07 4 views
4

Я установил mongodb на контейнер-докер вместе с openssh на ubuntu 14.04. Контейнер работает с ssh, но когда я ssh в контейнер, я получаю следующую ошибку при попытке запустить mongod.Ошибка при сборке контейнера mongod при запуске через ssh

[email protected]:~# 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.

[email protected]:/# 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 
+0

сообщение об ошибке Что вы получаете, когда вы запускаете 'mongod'? Вы проверили файл журнала - вы можете получить путь от mongod.conf под параметром 'logpath'. –

ответ

5

Проблема заключается в вашем подходе. Docker не имеет системы init, как вы привыкли к традиционным системам. Что делает докер заменить PID 1 с процессом, который вы указали в CMD или ENTRYPOINT Команды Dockerfile. На данный момент, игнорируйте ENTRYPOINT, потому что он заменяет ваши CMD (обычно это /bin/sh -c). Вы должны поручить докер начать службу mongod в вашем Dockerfile с командой CMD, как:

CMD usr/bin/mongod

И при запуске контейнера, mongod будет ваш PID 1. Теперь, вы, вероятно, интересно, на данный момент «Но как насчет моего SSH-сервера?» и ответ: Не запускайте SSH-сервер в своих контейнерах докеров. Там - это в некоторых случаях, когда запуск SSH-сервера в порядке, но почти все «обычные» причины (отладка, C & C и т. Д.) Аннулируются с помощью «лучшей практики» для получения оболочки на вашем контейнере:

docker exec -it myContainer /bin/bash

Это высадить вас в оболочку на вашем запущенном контейнере. Рекомендация здесь для управления конфигурацией и изменениями в вашем контейнере докеров заключается в использовании чего-то вроде Ansible. Однако помните, что контейнеры докеров эфемерны, и вы не должны перезапускать службы и изменять состояние конфигурации на них. Если вам необходимо изменить конфигурацию, измените файл Dockerfile или config, а затем запустите новый контейнер. Удачи! Here - это немного больше информации о Dockerizing MongoDB, но имейте в виду, что описанный там способ изменяет ENTRYPOINT в Dockerfile, что немного больше связано и требует лучшего понимания того, что происходит в Dockerfiles.

+1

Спасибо, я довольно новичок в докеров, как вы можете видеть. Я знал о команде exec, но не знал, что это не хорошая практика для размещения ssh-сервера. Я думаю, что в контейнерах Docker на самом деле должно быть только один сервис/демон за раз. –

0

Это действительно полезно. Я пытался заставить старые загрузочные книги Ansible работать с Docker, создав несколько пустых контейнеров, и пусть Ansible сделает все остальное.

Он работает через команду mongod --dbpath /var/lib/mongodb --smallfiles

+0

Для запуска как deamon, mongod --fork --logpath /var/log/mongodb.log --dbpath/var/lib/mongodb --smallfiles – shooding

Смежные вопросы