我正在尝试在Docker容器中本地启动Kafka,但似乎没有正确组合选项。
我正在Windows 10 Docker ce 2.0.0.3(31259)上运行。
我在做什么
在Docker容器中运行Zookeeper
docker run -d --name=zookeeper1 --network=host --env-file=zookeeper_options confluentinc/cp-zookeeper
由于zookeeper运行良好,我将忽略环境文件。
在Docker容器中运行Kafka
docker run -d --network=host --name=kafka --env-file=kafka_options confluentinc/cp-kafka
包含kafka_options
文件
KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181
KAFKA_LISTENERS=PLAINTEXT://localhost:9092
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:29092
尝试获取元数据列表
kafkacat -b localhost:29092 -L
(这是我在Windows 10 Ubuntu子系统中所做的,其他我是从PowerShell中运行的。我也有一个小型Java Kafka应用程序,尽管它表现出相同的行为)
结果是
%错误:无法获取元数据:本地:代理传输失败
我已阅读的内容
很显然,Quickstart with Docker documentation使用了我不想要的docker-compose;以及Docker section of the documentation。
除此之外,最著名的是this post by Robin explaining the advertised listeners concept,但我仍然看不到我做错了什么。
我还发现this issue about a difference in Windows阻止您使用Windows中的官方快速入门步骤;这导致我尝试使用单独的网络进行替代运行。
独立网络
按照问题中的步骤进行操作:
docker network create confluent
docker run -d --name=zookeeper1 --network=confluent -p 22181:2181 --env-file=zookeeper_options confluentinc/cp-zookeeper
docker run -d --network=confluent --name=kafka -p 29092:9092 --env-file=kafka_options confluentinc/cp-kafka
kafkacat -b localhost:29092 -L
那确实将结果更改为
%错误:无法获取元数据:本地:超时
因此看起来至少它可以连接,但最终并没有太大帮助。
问题是我在做什么错?是Kafka配置选项,还是我不知道的Docker问题?
编辑:
它可以与sample docker-compose.yml here一起使用,但是我们不应该能够分别启动容器吗?