私の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.
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