Я пытаюсь установить 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.
ref: stack overflow
Как упоминалось выше, причина в том, что вы пытаетесь установить версию, упакованную для служб Upstart init, но 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
Также, чтобы монголод работал при запуске с помощью 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 для запуска контейнера, так как скрипт init помещает монголод в фоновом режиме (вдобавок ко многим другим вещам). Для того, чтобы контейнеры докера работали непрерывно, CMD скрипт должен быть на переднем плане.
Клип из /etc/init.d/mongod start() обратите внимание на -фон там
# Start the process using the wrapper
start-stop-daemon --background --start --quiet --pidfile $PIDFILE \
--make-pidfile --chuid $DAEMONUSER \
--exec $NUMACTL $DAEMON $DAEMON_OPTS