Ошибка установки Mongodb в контейнере докеров Ubuntu 14.04

Я пытаюсь установить 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.
6
задан 2 January 2016 в 10:33
1 ответ

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
5
ответ дан 3 December 2019 в 00:31

Теги

Похожие вопросы