A instalação do Mongodb falha no container docker do Ubuntu 14.04

6

Estou tentando instalar o mongodb no ubuntu 14.04 em um contêiner docker, usando as seguintes etapas dos guias mongodb oficiais em meu 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

Esses comandos instalam o mongodb corretamente no sistema host do Ubuntu, mas não no Docker. Na minha imagem do docker, o /etc/init.d/mongod não está lá. O seguinte erro é impresso durante a execução do "docker build":

invoke-rc.d: unknown initscript, /etc/init.d/mongod not found.
invoke-rc.d: policy-rc.d denied execution of start.
    
por Paul 02.01.2016 / 09:33

1 resposta

5

ref: estouro de pilha

Como mencionado acima, o motivo é que você está tentando instalar uma versão empacotada para os serviços de inicialização do Upstart, mas o ubuntu 14.04 ainda usa o SysV init por padrão. A abordagem recomendada é usar a versão posterior 3.2.x de aqui ou se você é rigoroso sobre a versão, a correção é usar

deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen

em vez de

deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse

Além disso, para que o mongod seja executado ao iniciar com o docker run -d , você precisará adicionar um CMD a ele. Então, eu modifiquei e compilei um arquivo docker para testar isso e ficou assim:

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", "."]

Note que, eu não usei o init para iniciar o container, pois o script de inicialização coloca o mongod em segundo plano (além de muitas outras coisas). Para que os contêineres do Docker sejam executados continuamente, o script CMD deve estar em primeiro plano.

Um clipe de /etc/init.d/mongod start () nota o - plano de fundo

    # Start the process using the wrapper
    start-stop-daemon --background --start --quiet --pidfile $PIDFILE \
                --make-pidfile --chuid $DAEMONUSER \
                --exec $NUMACTL $DAEMON $DAEMON_OPTS
    
por 04.01.2016 / 10:07