2017-02-20 5 views
1

私はDockerを使いこなすのが新しいので、これは私のせいだが、Docker Composeを使ってマルチホストApache Cassandraリングの設定をしようとしている。マルチホストのcassandra Dockerのファイルの作成

私はドッカー-compose.ymlファイル次

version: '2' 

services: 

    cassandra-1: 
     hostname: cassandra-1 
     image: cassandra:latest 
     command: /bin/bash -c "sleep 1 && echo ' -- Pausing to let system catch up ... -->' && /docker-entrypoint.sh cassandra -f" 
     expose: 
     - 7000 
     - 7001 
     - 7199 
     - 9042 
     - 9160 
     # volumes: # uncomment if you desire mounts, also uncomment cluster.sh 
     # - ./data/cassandra-1:/var/lib/cassandra:rw 

    cassandra-2: 
     hostname: cassandra-2 
     image: cassandra:latest 
     command: /bin/bash -c "sleep 20 && echo ' -- Pausing to let system catch up ... -->' && /docker-entrypoint.sh cassandra -f" 
     environment: 
     - CASSANDRA_SEEDS=cassandra-1 
     links: 
     - cassandra-1:cassandra-1 
     expose: 
     - 7000 
     - 7001 
     - 7199 
     - 9042 
     - 9160 
     # volumes: # uncomment if you desire mounts, also uncomment cluster.sh 
     # - ./data/cassandra-2:/var/lib/cassandra:rw 
この例では、別の容器に、次いで第1のCassandraノード(カサンドラ-1)及び第2ノード(カサンドラ-2)を開始しようと

それはしかし、

を「CASSANDRA_SEEDS」私はこれを実行すると、私は例外のこの種を取得し、標準カサンドラ環境変数のシードノードとして第一ノードを使用することができるはず

cassandra-2_1 | WARN 07:00:35 Seed provider couldn't lookup host cassandra-1 
cassandra-2_1 | Exception (org.apache.cassandra.exceptions.ConfigurationException) encountered during startup: The 
provider lists no seeds. 
cassandra-2_1 | The seed provider lists no seeds. 
cassandra-2_1 | ERROR 07:00:35 Exception encountered during startup: The seed provider lists no seeds. 
cass2_cassandra-2_1 exited with code 3 
第二カサンドラノード(カサンドラ-2)を起動しようとする試みは常に失敗し、私は2つの部分に ドッキングウィンドウ-compose.yamlファイルを分割する場合は第一

cass1_cassandra-1_1 exited with code 137 

に殺すまでも終了

1番目のcassandraノードの開始点は1つのファイル内にあります。 ドッカーを使用してそのノードを開始してください。がOKです。

も、私は「カサンドラ-2」の2つの別々のドッキングウィンドウ-compose.ymlファイルのルート、「カサンドラ-1」のための1つ、および別のを取るとき、私AMは必ず第二のファイルということ作ることに注意してください"リンク"ではなく "external_links"を使用します。しかし結果は同じです

もう少しドッカーの経験がある方は、どこに間違っているのか教えてください。

私は他の例のためにウェブを磨き、誰もが私と同じようにやっているようです。しかし、私だけでは機能しません。かなり失われた感じ

は、

答えて

1

これは、Docker for Windowsでのみ問題となるようです。私は元のファイルをMacで試してみましたが、うまくいきました。

1

を助けてください、あなたは、2番目のノードがクラスタに参加しようとする前に、最初のノードが起動を終えたことを確認しましたか?

私の経験では、最初のノードが起動を完了するまでに20秒では不十分です。 2番目のノードをクラスタに参加する前に60秒間スリープさせます。上記のコマンドでも

command: /bin/bash -c "echo ' -- Pausing to let system catch up ...' && sleep 60 && /docker-entrypoint.sh cassandra -f" 

私はあなたが慎重に、端末の出力を見ているように、より理にかなっているechosleepを入れ替え。 cassandra-1

ログは、お使いの端末でこのコマンドを実行することにより、

INFO 21:21:06 Node /172.18.0.2 state jump to NORMAL 
INFO 21:23:04 Handshaking version with /172.18.0.4 
INFO 21:23:07 Node /172.18.0.4 is now part of the cluster 
INFO 21:23:07 InetAddress /172.18.0.4 is now UP 

非常コンテナのログのようなものが表示されるはずです:

docker logs [OPTIONS] CONTAINER_ID 

docker psを実行することで、コンテナのIDを検索します。

まだ問題が解決しない場合は、mem_limit: 1024mを両方のCassandraコンテナ定義に追加してみてください。おそらく、限られたメモリリソースのために起動が失敗する可能性があります。

+0

悲しいことに、それは何の違いもありませんでした。同じエラー。私はWindows上でDockerを実行しています。私はこのファイルをdockerのLinuxユーザーに渡しました。 GRRRR – sacha

関連する問題