2017-06-01 10 views
3

ユーザーと基本データベース構造が既にセットアップされている(Dockerfileから)mongodbコンテナを構築しようとしています。 (テスト目的のためにそれを縮小さ)Mongodb Docker - 初期ユーザーの作成と初期構造の設定

FROM mongo:latest 

RUN mongo localhost:27017 "db.help()" 

は、ここに私のDockerfileです。

私はエラーを取得しておいてください。

connecting to: localhost:27017 
2017-06-01T14:49:34.353+0000 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused 
2017-06-01T14:49:34.353+0000 E QUERY [thread1] Error: couldn't connect to server localhost:27017, connection attempt failed : 
[email protected]/mongo/shell/mongo.js:237:13 
@(connect):1:6 
exception: connect failed 

...と、コンテナは、ビルドに失敗します。私はDockerfileからビルドしているので、ログをチェックする方法もわかりませんし、コンテナがビルドできないと、内部でログをチェックする方法がありません。しかし

、私はそのRUNコマンドを削除し、手動で行う場合:

docker -exec -it mongodb_container bash 
mongo 
> db.help() 

...それは動作します。

私はmongodbに所有権を設定しようとしました:mongodbと成功しないで〜/ db dirへのログとdbパスの移動を試みました。

PS:私はドッカーを使用しています。開発者が物事を自分で管理する必要がないように、ドッカーの作成でこれを行いたいと思います。ここで

ドッカ・コンセグメントである:

mongodb: 
    build: ./mongodb 
    ports: 
    - "27017:27017" 

EDIT:

私は0.0.0.0:27017に変更した場合は、その後、私はこのエラーを取得する:

MongoDB shell version v3.4.4 
connecting to: 0.0.0.0:27017 
2017-06-01T15:52:52.806+0000 E QUERY [thread1] Error: couldn't connect to server 0.0.0.0:27017, address resolved to 0.0.0.0 : 
[email protected]/mongo/shell/mongo.js:237:13 
@(connect):1:6 
exception: connect failed 

EDIT2:

私はDockerfileを次のように試してみてください。

FROM mongo:latest 

RUN mkdir -p /data/db2 \ 
    && echo "dbpath = /data/db2" > /etc/mongodb.conf \ 
    && chown -R mongodb:mongodb /data/db2 

COPY . /data/db2 

RUN mongod --fork --logpath /var/log/mongodb.log --dbpath /data/db2 

MongoDBは最初に起動するが、その後の出力で終了します。

mongodb_1 | 2017-06-01T15:55:52.955+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=64a317041edd 
mongodb_1 | 2017-06-01T15:55:52.956+0000 I CONTROL [initandlisten] db version v3.4.4 
mongodb_1 | 2017-06-01T15:55:52.956+0000 I CONTROL [initandlisten] git version: 888390515874a9debd1b6c5d36559ca86b44babd 
mongodb_1 | 2017-06-01T15:55:52.956+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1t 3 May 2016 
mongodb_1 | 2017-06-01T15:55:52.956+0000 I CONTROL [initandlisten] allocator: tcmalloc 
mongodb_1 | 2017-06-01T15:55:52.956+0000 I CONTROL [initandlisten] modules: none 
mongodb_1 | 2017-06-01T15:55:52.956+0000 I CONTROL [initandlisten] build environment: 
mongodb_1 | 2017-06-01T15:55:52.956+0000 I CONTROL [initandlisten]  distmod: debian81 
mongodb_1 | 2017-06-01T15:55:52.956+0000 I CONTROL [initandlisten]  distarch: x86_64 
mongodb_1 | 2017-06-01T15:55:52.956+0000 I CONTROL [initandlisten]  target_arch: x86_64 
mongodb_1 | 2017-06-01T15:55:52.956+0000 I CONTROL [initandlisten] options: {} 
mongodb_1 | 2017-06-01T15:55:52.964+0000 E NETWORK [initandlisten] Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted 
mongodb_1 | 2017-06-01T15:55:52.964+0000 I -  [initandlisten] Fatal Assertion 28578 at src/mongo/util/net/listen.cpp 194 
mongodb_1 | 2017-06-01T15:55:52.964+0000 I -  [initandlisten] 
mongodb_1 | 
mongodb_1 | ***aborting after fassert() failure 
mongodb_1 | 
mongodb_1 | 
stuff_mongodb_1 exited with code 14 
+0

Mongoはコンテナ内のどのポートを聴いていますか?ポート27017にバインドしていないようです。 –

+0

親Dockerfileは27017/27018/27019で聴いています。または私は間違っていますか? – user3271166

+0

申し訳ありませんが、localhost:27017でコマンドラインを解析しませんでした。 0.0.0.0:27017 –

答えて

1

あなたがわずかに異なるアプローチを使用することができます。最初に起動するたびにmongoにデータを送ることができます。これは、馴染みのある容器mongo-seedを使って達成できます。

このアプローチを参照してください:私はhereからコードを取ったが、私はせずに、それを改善してきた

docker-compose up 
docker-compose exec mongodb mongo 
> use example-db 
> db.MyDummyCollection.find() 
{ "_id" : ObjectId("592f5496fcdcafc0a8e0e0c8"), "name" : "Joe Smith", "email" : "[email protected]", "age" : 40, "admin" : false } 
{ "_id" : ObjectId("592f5496fcdcafc0a8e0e0c9"), "name" : "Jen Ford", "email" : "[email protected]", "age" : 45, "admin" : true } 

:として

[ 
    { 
    "name": "Joe Smith", 
    "email": "[email protected]", 
    "age": 40, 
    "admin": false 
    }, 
    { 
    "name": "Jen Ford", 
    "email": "[email protected]", 
    "age": 45, 
    "admin": true 
    } 
] 

実行init.json

version: "2" 

mongodb: 
    image: mongo 
    ports: 
    - "27017:27017" 
mongo-seed: 
    image: mongo 
    command: mongoimport --host mongodb --db example-db --collection MyDummyCollection --type json --file /init.json --jsonArray 
    volumes: 
    - ./init.json:/init.json 

をシードのDockerfileが必要です。

+1

ありがとう、後でそれを与える – user3271166