我想用Docker和Docker Compose運行Kafka。這是docker-compose.yml
:Docker(撰寫)客戶端太早連接到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的卡夫卡節點)連接和監聽某個主題,並且是每次運行時發佈一個消息給它。
問題是我不斷收到Connection Refused錯誤。我正在使用Dockerize等待Dockerfile
中的線路CMD dockerize -wait tcp://kafka:9092 node /service/index.js
中的kafka端口可用。
它啓動用戶容器和此係統之前等待端口可用,但它不是在正確的時間。卡夫卡似乎在選舉領導人之前打開了9092港口。
當我首先運行Kafka並讓它完全啓動並運行我的應用程序時,它運行順利。
在開始我的服務之前,我該如何等待正確的時刻?
你沒有忘記閱讀https://stackoverflow.com/help/someone-answers,不是嗎? – VonC