質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • Ubuntu

    1480questions

    Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

  • Docker

    765questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

  • MongoDB

    251questions

    MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Docker上でMongoDBが動かせない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,132

kennyso

score 16

Dockerを使って、MongoDBを動かそうと思っているのですが、なかなかうまくいきません。
具体的には、

$ service mongod start


を実行しようとしても
mongod: unrecognized service
と表示されて mongod がスタートされません。

環境は以下の通りです。

<ホスト側>
OS : OS X El Capitan 10.11.3
Docker : 1.11.1, build 5604cbe

<コンテナ側>
OS : Ubuntu 14.04

具体的には以下のような Dockerfileを使っています。

FROM ubuntu:14.04

# Replace sh to bash
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# Install necessary package and tool
RUN apt-get update -q -y

# Git
RUN apt-get install -y git && \
# NVM
    git clone https://github.com/creationix/nvm.git ~/.nvm && \
    source ~/.nvm/nvm.sh && \
# wget
    apt-get install wget -y && \
# Curl
    apt-get install curl -y && \
# Node.js
    nvm install 4.4.1 && \
# Socket.io
    npm install socket.io && \
# MongoDB
    apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 && \
    echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list && \
    mkdir -p /data/db && \
    apt-get update && \
    apt-get install -y mongodb-org

このDockerファイルを置いたディレクトリ上で、

$ docker build -t my-mongodb .

を実行し、イメージを作成した後に、Runをしています。

$ docker run -it my-mongodb

Dockerfileに書いた、MongDBのインストール手順は、
MongDBオフィシャルインストールガイド
を参考にしてそのまま記述したつもりです。

しかし、コンテナ実行後に、

$ service mongod start


を実行したところ、
mongod: unrecognized service
と表示されて mongod がスタートされません。
また、/etc/init.d/ を確認してみると、そもそも mongd が存在していないようです。
オフィシャルの MongoDBインストールマニュアルの通り実行したはずなのになぜうまくいかないのかわかりません・・・。

どなたかアドバイスをお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

1コンテナ = 1仮想環境と考えてコンテナを構築する場合、フォアグラウンドで動かないサービスが出てきて苦労することになります。私も以前同様の方法でコンテナを作ろうとしていました。2つ方向性があります。



現在centos(node.js - socket.io - forever)コンテナ + docker.io/mongodbコンテナの組み合わせで使っていますが、仮にmongodbの新しいバージョンを使いたい場合は、新しいコンテナのイメージをpullしてきて、リンクを付け替えることができます。

1コンテナ1サービスで運用するメリットはミドルウェアの差し替えが容易になることです。1コンテナ1環境の場合は vagrant+プロビジョニングツール の方がいいのではないかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

docker build中にこんなエラーは、でてませんでしかたか?

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

mongodb-orgの新しいversionは、ubuntu 14.04が必要と考えるファイル(/etc/init.d/mongod)を
含まなくなったため、installでエラーが発生します。
とりあえず、touch で作っちゃいましょう。

# MongoDB
    touch /etc/init.d/mongod && \
    apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 && \
    echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list && \
...

まずは、mongodをコマンドで直接起動。

$ mongod

初回は、プロセスが起動しても、実際に利用できるまで数分程度時間がかかります。
以下のコマンドで、port 27017がLISTEN中か確認できるまで、待ってください。

$ netstat -an          
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN     
...

mongodをserviceコマンドで起動したい場合には、/etc/init/mongod.conf を参考に
ご自分で/etc/init.d/mongod を作成してみて下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Ubuntu

    1480questions

    Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

  • Docker

    765questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

  • MongoDB

    251questions

    MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。