1

Zookeeper サーバーと API のブートストラップ プロセス、および docker-compose を使用して API によって Zookeeper サーバーに書き込まれたデータを消費する必要がある別のプロセスを起動しようとしています。

docker-compose up を実行すると、Zookeeper サーバーが正常に起動し、ブートストラップ API が接続してデータを正常に書き込むことができます。

ここでの制約は、API がデータを飼育係に書き込むのを 2 番目のプロセスが待機する必要があることです。それ以外の場合は、それまで API によってノードが作成されないため、例外が発生します。したがって、docker-compose.ml ファイルのコマンド セクションで、bash コマンドを実行し、プログラムが終了しないように while ループを追加してブートストラップ API を無限に実行し、2 番目のプロセスにスリープ ステートメントを追加しました。 API がジョブを完了するまで待機するようにします。(一種の競合状態処理)。

私が理解したことから、docker-compose は docker-compose.yml ファイルの「リンク」を使用して順序付けを処理しますが、起動する必要がある個々のプロセスの状態は処理しません。つまり、最初のプロセスが正常に終了したら、2 番目のプロセスを開始する必要があります。

これが私のdocker-compose.ymlファイルです-

zookeeper:
  image: xyz.com/temp
  ports:
    - "10000:2181"
bootstrapapi:
  image: xyz.com/temp1
  command: /bin/bash -c "cd /code; make test_data ZK_HOSTS=zookeeper:2181 CLUSTER=cluster ; while [ true ]; do sleep 5; done"
  volumes:
    - .:/test
  links:
    - zookeeper
xyz:
  image: def.com/temp2
  command: /bin/bash -c "sleep 10;python -m test --zk-hosts=zookeeper:2181 --zk-cluster-path=cluster "
  links:
    - zookeeper

詳細が必要な場合は、お知らせいただければ幸いです。前もって感謝します。

4

1 に答える 1

0

私の問題を解決する方法は、コンテナー間で共有ボリュームを使用することでした。この場合、最初のプロセスはこのボリュームに新しいファイルを作成し、他のプロセスはこのファイルが作成されたかどうかを確認するためにループを実行します。2 番目のプロセスがそれを検出すると、そのデータを消費するジョブを開始します。

これは、docker-compose で bash スクリプトを使用して、docker-compose でこの生産者と消費者の競合状態のシナリオを解決する簡単な方法でした。これが役立つことを願っています。

于 2015-05-11T20:51:04.420 に答える