Я пытаюсь установить mongodb на ubuntu 14.04 в контейнере докеров, используя следующие шаги из официальных руководств mongodb в моем Dockerfile:
RUN sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
RUN echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
RUN apt-get update && apt-get -q -y install \
nodejs\
npm \
git \
mongodb-org
Эти команды правильно устанавливают mongodb в моей хост-системе ubuntu, но не в докере. В моем образе докера /etc/init.d/mongod нет. При запуске «docker build» выводится следующая ошибка:
invoke-rc.d: unknown initscript, /etc/init.d/mongod not found.
invoke-rc.d: policy-rc.d denied execution of start.
ссылка: переполнение стека
Как упоминалось выше, причина в том, что вы пытаетесь установить версию, упакованную для служб инициализации Upstart, но ubuntu 14.04 по-прежнему использует SysV init по умолчанию. Рекомендуемый подход - использовать более позднюю версию 3.2.x из Вот или если вы строго относитесь к версии, исправление заключается в использовании
deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen
вместо того
deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse
Кроме того, чтобы запустить mongod при запуске с docker run -d, вам нужно добавить к нему CMD. Итак, я изменил и скомпилировал файл докера, чтобы проверить это, и выглядел так:
FROM ubuntu:14.04
RUN sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 \
&& echo "deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list \
&& apt-get update && apt-get -q -y install \
nodejs\
npm \
git \
mongodb-org
CMD ["mongod", "--dbpath", "."]
Обратите внимание, что я не использовал init для запуска контейнера, поскольку сценарий инициализации помещает mongod в фоновый режим (в дополнение ко многим другим вещам). Чтобы контейнеры докеров работали непрерывно, сценарий CMD должен находиться на переднем плане.
Клип из /etc/init.d/mongod Начало() Обратите внимание --задний план там
# Start the process using the wrapper
start-stop-daemon --background --start --quiet --pidfile $PIDFILE \
--make-pidfile --chuid $DAEMONUSER \
--exec $NUMACTL $DAEMON $DAEMON_OPTS