Назад | Перейти на главную страницу

Ошибка установки 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.

ссылка: переполнение стека

Как упоминалось выше, причина в том, что вы пытаетесь установить версию, упакованную для служб инициализации 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