web-dev-qa-db-ja.com

Ubuntu 14.04 DockerコンテナーでMongodbのインストールが失敗する

私のDockerfileにある公式のmongodbガイドの次の手順を使用して、Dockerコンテナーのubuntu 14.04にmongodbをインストールしようとしています。

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をHost ubuntuシステムに適切にインストールしますが、Dockerにはインストールしません。私のdockerイメージでは、/ 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
Paul

ref: スタックオーバーフロー

上で述べたように、理由はUpstart initサービス用にパッケージ化されたバージョンをインストールしようとしているが、ubuntu 14.04はデフォルトでまだSysV initを使用しているためです。推奨されるアプローチは、 here から新しいバージョン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で起動したときにmongodを実行するには、それにCMDを追加する必要があります。したがって、これをテストするためにDockerファイルを変更してコンパイルすると、次のようになります。

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をバックグラウンドに配置するため、私はコンテナを開始するためにinitを使用しなかったことに注意してください。 Dockerコンテナーを継続的に実行するには、CMDスクリプトをフォアグラウンドにする必要があります。

/etc/init.d/mongodstart()からのクリップ-backgroundがそこにあることに注意してください

    # Start the process using the wrapper
    start-stop-daemon --background --start --quiet --pidfile $PIDFILE \
                --make-pidfile --chuid $DAEMONUSER \
                --exec $NUMACTL $DAEMON $DAEMON_OPTS
5
Maniankara