2016-05-22 9 views
0

わかりましたので、私は、私はこのような私の「ドッキングウィンドウの実行」の手順を自動化することができます知っている私はコンなしでこれを行うだろうと言う。Docker-compose:コンテナ内でコマンドを実行するように作成を自動化できますか?

まずコンテナ

docker run --name mongodb-node-1 -d -v mongodb-node-1:/data/db -p 27031:27017 --link mongo-node-2:mongo mongo --replSet rs0 --smallfiles --oplogSize 128 
ボリューム

docker volume create --name mongodb-shard-1-node-1 

を作成

これはdocker-compose.ymlファイルにこれを含めるのと同じです:

mongodb-node-1: 
    image: mongo 
    volumes: 
     - "mongodb-node-1:/data/db" 
    ports: 
     - "27031:27017" 
    container_name: mongodb-node-1 

    external_links: 
     - "mongodb-node-3:mongo" 

    command: --replSet rs0 --smallfiles --oplogSize 128 

しかし、私はまた、このようなシェル入力するように、私は最初execを使用し、これを行うために、MongoDBのシェル内でコマンドを実行する必要があります。私は、このような

rs.initiate() 
などのコマンドを実行する必要が殻の内側その後

docker exec -it mongodb-shard-1-node-1 mongo 

rs.addArb("172.17.0.6:27017") 

などのような

など...

docker-composeでこれらの最後の手順を自動化することはできますか?ドッカーでこれを自動化することは可能ですか?

答えて

0

悲しいことに、それを直接自動化することはできません。

回避策として、実行するシェルスクリプトで追加するコンテナを拡張し、Mongoを起動して指定されたコマンドを実行できます。そのIPアドレスを変更可能にする必要がある場合は、環境変数に渡すこともできます。

+0

「イメージを拡大する」という意味ですか?もしそうなら、合意した。これが最良のアプローチです。 –

0

Kontenaは、docker-compose.ymlファイル形式を採用しており、post_startフックを追加することでこの種の機能を導入しました。

peer: image: mongo:3.2 stateful: true command: --replSet kontena --smallfiles instances: 3 hooks: post_start: - cmd: sleep 10 name: sleep instances: 1 oneshot: true - cmd: mongo --eval "printjson(rs.initiate());" name: rs_initiate instances: 1 oneshot: true - cmd: mongo --eval "printjson(rs.add('%{project}-peer-2'))" name: rs_add2 instances: 1 oneshot: true - cmd: mongo --eval "printjson(rs.add('%{project}-peer-3'))" name: rs_add3 instances: 1 oneshot: true https://github.com/kontena/examples/blob/master/mongodb-cluster/kontena.yml

$ kontena app deployコマンドは、3つのすべてのMongoDBのピアを展開し、レプリカセットに追加します。