DockerとDocker ComposeでKafkaを実行しようとしています。これはdocker-compose.yml
です:Docker(Compose)クライアントがKafkaに接続するのが早すぎる
version: "2"
services:
zookeeper:
image: "wurstmeister/zookeeper"
ports:
- "2181:2181"
kafka:
build:
context: "./services/kafka"
dockerfile: "Dockerfile"
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: "0.0.0.0"
KAFKA_CREATE_TOPICS: "test:1:1"
KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
users:
build:
context: "./services/users"
dockerfile: "Dockerfile"
ports:
- "4001:4001"
environment:
NODE_ENV: "develop"
ZOOKEEPER_HOST: "zookeeper"
ZOOKEEPER_PORT: "2181"
volumes:
- "./services/users:/service"
ユーザーのサービスは、(Node.jsの中カフカ・ノードを使用して)接続しようとすると、それが実行されるたびに話題に耳を傾け、それに一つのメッセージを公開しています。
問題は、接続拒否エラーが発生し続けることです。私はDockerizeを使用して、Dockerfile
のkafkaポートがCMD dockerize -wait tcp://kafka:9092 node /service/index.js
で利用可能になるのを待っています。
ユーザコンテナを起動する前にポートが利用可能になるのを待っていますが、このシステムは動作しますが、適切なタイミングではありません。カフカがリーダーを選ぶ前に9092港を開港しているようだ。
私はKafkaを最初に実行して完全に起動させてから、自分のアプリケーションを実行すると、スムーズに動作します。
サービスを開始する前に正しい瞬間を待つ方法を教えてください。
あなたはhttps://stackoverflow.com/help/someone-answersを読むのを忘れましたか? – VonC